mirror of
https://git.sr.ht/~tsileo/microblog.pub
synced 2024-11-15 03:04:28 +00:00
Fix collection parsing
This commit is contained in:
parent
5ad4d81735
commit
da029c1566
3 changed files with 34 additions and 20 deletions
|
@ -24,7 +24,6 @@ from little_boxes import activitypub as ap
|
||||||
from little_boxes import strtobool
|
from little_boxes import strtobool
|
||||||
from little_boxes.activitypub import _to_list
|
from little_boxes.activitypub import _to_list
|
||||||
from little_boxes.backend import Backend
|
from little_boxes.backend import Backend
|
||||||
from little_boxes.collection import parse_collection as ap_parse_collection
|
|
||||||
from little_boxes.errors import Error
|
from little_boxes.errors import Error
|
||||||
from utils.media import Kind
|
from utils.media import Kind
|
||||||
|
|
||||||
|
@ -105,6 +104,28 @@ class MicroblogPubBackend(Backend):
|
||||||
def outbox_new(self, as_actor: ap.Person, activity: ap.BaseActivity) -> None:
|
def outbox_new(self, as_actor: ap.Person, activity: ap.BaseActivity) -> None:
|
||||||
self.save(Box.OUTBOX, activity)
|
self.save(Box.OUTBOX, activity)
|
||||||
|
|
||||||
|
def parse_collection(
|
||||||
|
payload: Optional[Dict[str, Any]] = None, url: Optional[str] = None
|
||||||
|
) -> List[str]:
|
||||||
|
"""Resolve/fetch a `Collection`/`OrderedCollection`."""
|
||||||
|
# Resolve internal collections via MongoDB directly
|
||||||
|
if url == ID + "/followers":
|
||||||
|
q = {
|
||||||
|
"box": Box.INBOX.value,
|
||||||
|
"type": ap.ActivityType.FOLLOW.value,
|
||||||
|
"meta.undo": False,
|
||||||
|
}
|
||||||
|
return [doc["activity"]["actor"] for doc in DB.activities.find(q)]
|
||||||
|
elif url == ID + "/following":
|
||||||
|
q = {
|
||||||
|
"box": Box.OUTBOX.value,
|
||||||
|
"type": ap.ActivityType.FOLLOW.value,
|
||||||
|
"meta.undo": False,
|
||||||
|
}
|
||||||
|
return [doc["activity"]["object"] for doc in DB.activities.find(q)]
|
||||||
|
|
||||||
|
return super().parse_collection(payload, url)
|
||||||
|
|
||||||
@ensure_it_is_me
|
@ensure_it_is_me
|
||||||
def outbox_is_blocked(self, as_actor: ap.Person, actor_id: str) -> bool:
|
def outbox_is_blocked(self, as_actor: ap.Person, actor_id: str) -> bool:
|
||||||
return bool(
|
return bool(
|
||||||
|
@ -160,11 +181,15 @@ class MicroblogPubBackend(Backend):
|
||||||
|
|
||||||
@ensure_it_is_me
|
@ensure_it_is_me
|
||||||
def undo_new_follower(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
def undo_new_follower(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
||||||
DB.activities.update_one({"remote_id": follow.id}, {"$set": {"meta.undo": True}})
|
DB.activities.update_one(
|
||||||
|
{"remote_id": follow.id}, {"$set": {"meta.undo": True}}
|
||||||
|
)
|
||||||
|
|
||||||
@ensure_it_is_me
|
@ensure_it_is_me
|
||||||
def undo_new_following(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
def undo_new_following(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
||||||
DB.activities.update_one({"remote_id": follow.id}, {"$set": {"meta.undo": True}})
|
DB.activities.update_one(
|
||||||
|
{"remote_id": follow.id}, {"$set": {"meta.undo": True}}
|
||||||
|
)
|
||||||
|
|
||||||
@ensure_it_is_me
|
@ensure_it_is_me
|
||||||
def new_following(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
def new_following(self, as_actor: ap.Person, follow: ap.Follow) -> None:
|
||||||
|
@ -498,20 +523,6 @@ def build_inbox_json_feed(
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
def parse_collection(
|
|
||||||
payload: Optional[Dict[str, Any]] = None, url: Optional[str] = None
|
|
||||||
) -> List[str]:
|
|
||||||
"""Resolve/fetch a `Collection`/`OrderedCollection`."""
|
|
||||||
# Resolve internal collections via MongoDB directly
|
|
||||||
if url == ID + "/followers":
|
|
||||||
return [doc["remote_actor"] for doc in DB.followers.find()]
|
|
||||||
elif url == ID + "/following":
|
|
||||||
return [doc["remote_actor"] for doc in DB.following.find()]
|
|
||||||
|
|
||||||
# Go through all the pages
|
|
||||||
return ap_parse_collection(payload, url)
|
|
||||||
|
|
||||||
|
|
||||||
def embed_collection(total_items, first_page_id):
|
def embed_collection(total_items, first_page_id):
|
||||||
"""Helper creating a root OrderedCollection with a link to the first page."""
|
"""Helper creating a root OrderedCollection with a link to the first page."""
|
||||||
return {
|
return {
|
||||||
|
|
5
app.py
5
app.py
|
@ -41,6 +41,7 @@ import activitypub
|
||||||
import config
|
import config
|
||||||
from activitypub import Box
|
from activitypub import Box
|
||||||
from activitypub import embed_collection
|
from activitypub import embed_collection
|
||||||
|
from config import ACTOR_SERVICE
|
||||||
from config import ADMIN_API_KEY
|
from config import ADMIN_API_KEY
|
||||||
from config import BASE_URL
|
from config import BASE_URL
|
||||||
from config import DB
|
from config import DB
|
||||||
|
@ -53,6 +54,7 @@ from config import JWT
|
||||||
from config import KEY
|
from config import KEY
|
||||||
from config import ME
|
from config import ME
|
||||||
from config import MEDIA_CACHE
|
from config import MEDIA_CACHE
|
||||||
|
from config import OBJECT_SERVICE
|
||||||
from config import PASS
|
from config import PASS
|
||||||
from config import USERNAME
|
from config import USERNAME
|
||||||
from config import VERSION
|
from config import VERSION
|
||||||
|
@ -73,9 +75,6 @@ from little_boxes.webfinger import get_actor_url
|
||||||
from little_boxes.webfinger import get_remote_follow_template
|
from little_boxes.webfinger import get_remote_follow_template
|
||||||
from utils.key import get_secret_key
|
from utils.key import get_secret_key
|
||||||
from utils.media import Kind
|
from utils.media import Kind
|
||||||
from utils.object_service import ObjectService
|
|
||||||
|
|
||||||
OBJECT_SERVICE = ACTOR_SERVICE = ObjectService()
|
|
||||||
|
|
||||||
back = activitypub.MicroblogPubBackend()
|
back = activitypub.MicroblogPubBackend()
|
||||||
ap.use_backend(back)
|
ap.use_backend(back)
|
||||||
|
|
|
@ -15,6 +15,7 @@ from utils.key import KEY_DIR
|
||||||
from utils.key import get_key
|
from utils.key import get_key
|
||||||
from utils.key import get_secret_key
|
from utils.key import get_secret_key
|
||||||
from utils.media import MediaCache
|
from utils.media import MediaCache
|
||||||
|
from utils.object_service import ObjectService
|
||||||
|
|
||||||
|
|
||||||
class ThemeStyle(Enum):
|
class ThemeStyle(Enum):
|
||||||
|
@ -147,3 +148,6 @@ ME = {
|
||||||
},
|
},
|
||||||
"publicKey": KEY.to_dict(),
|
"publicKey": KEY.to_dict(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OBJECT_SERVICE = ACTOR_SERVICE = ObjectService()
|
||||||
|
|
Loading…
Reference in a new issue