forked from forks/microblog.pub
Fix follower handling
This commit is contained in:
parent
0b34913c6e
commit
6a20f30bad
3 changed files with 16 additions and 11 deletions
10
app.py
10
app.py
|
@ -60,6 +60,7 @@ from core.meta import by_object_id
|
||||||
from core.meta import by_remote_id
|
from core.meta import by_remote_id
|
||||||
from core.meta import by_type
|
from core.meta import by_type
|
||||||
from core.meta import by_visibility
|
from core.meta import by_visibility
|
||||||
|
from core.meta import follow_request_accepted
|
||||||
from core.meta import in_inbox
|
from core.meta import in_inbox
|
||||||
from core.meta import in_outbox
|
from core.meta import in_outbox
|
||||||
from core.meta import is_public
|
from core.meta import is_public
|
||||||
|
@ -145,6 +146,7 @@ def inject_config():
|
||||||
following_q = {
|
following_q = {
|
||||||
**in_outbox(),
|
**in_outbox(),
|
||||||
**by_type(ActivityType.FOLLOW),
|
**by_type(ActivityType.FOLLOW),
|
||||||
|
**follow_request_accepted(),
|
||||||
**not_undo(),
|
**not_undo(),
|
||||||
**not_deleted(),
|
**not_deleted(),
|
||||||
}
|
}
|
||||||
|
@ -849,7 +851,13 @@ def followers():
|
||||||
|
|
||||||
@app.route("/following")
|
@app.route("/following")
|
||||||
def following():
|
def following():
|
||||||
q = {**in_outbox(), **by_type(ActivityType.FOLLOW), **not_undo()}
|
q = {
|
||||||
|
**in_outbox(),
|
||||||
|
**by_type(ActivityType.FOLLOW),
|
||||||
|
**not_deleted(),
|
||||||
|
**follow_request_accepted(),
|
||||||
|
**not_undo(),
|
||||||
|
}
|
||||||
|
|
||||||
if is_api_request():
|
if is_api_request():
|
||||||
_log_sig()
|
_log_sig()
|
||||||
|
|
|
@ -379,6 +379,7 @@ def admin_notifications() -> _Response:
|
||||||
"activity.object": {"$regex": f"^{config.BASE_URL}"},
|
"activity.object": {"$regex": f"^{config.BASE_URL}"},
|
||||||
}
|
}
|
||||||
followed_query = {"type": ap.ActivityType.ACCEPT.value}
|
followed_query = {"type": ap.ActivityType.ACCEPT.value}
|
||||||
|
rejected_query = {"type": ap.ActivityType.REJECT.value}
|
||||||
q = {
|
q = {
|
||||||
"box": Box.INBOX.value,
|
"box": Box.INBOX.value,
|
||||||
"$or": [
|
"$or": [
|
||||||
|
@ -387,6 +388,7 @@ def admin_notifications() -> _Response:
|
||||||
replies_query,
|
replies_query,
|
||||||
new_followers_query,
|
new_followers_query,
|
||||||
followed_query,
|
followed_query,
|
||||||
|
rejected_query,
|
||||||
unfollow_query,
|
unfollow_query,
|
||||||
likes_query,
|
likes_query,
|
||||||
],
|
],
|
||||||
|
|
|
@ -176,15 +176,10 @@ def _follow_process_inbox(activity: ap.Follow, new_meta: _NewMeta) -> None:
|
||||||
post_to_outbox(accept)
|
post_to_outbox(accept)
|
||||||
|
|
||||||
|
|
||||||
def _update_follow_status(follow: ap.BaseActivity, status: FollowStatus) -> None:
|
def _update_follow_status(follow_id: str, status: FollowStatus) -> None:
|
||||||
if not follow.has_type(ap.Follow) or not is_from_outbox(follow):
|
_logger.info(f"{follow_id} is {status}")
|
||||||
_logger.warning(
|
|
||||||
"received an Accept/Reject from an unexpected activity: {follow!r}"
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
|
|
||||||
update_one_activity(
|
update_one_activity(
|
||||||
by_remote_id(follow.id), upsert({MetaKey.FOLLOW_STATUS: status.value})
|
by_remote_id(follow_id), upsert({MetaKey.FOLLOW_STATUS: status.value})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,14 +187,14 @@ def _update_follow_status(follow: ap.BaseActivity, status: FollowStatus) -> None
|
||||||
def _accept_process_inbox(activity: ap.Accept, new_meta: _NewMeta) -> None:
|
def _accept_process_inbox(activity: ap.Accept, new_meta: _NewMeta) -> None:
|
||||||
_logger.info(f"process_inbox activity={activity!r}")
|
_logger.info(f"process_inbox activity={activity!r}")
|
||||||
# Set a flag on the follow
|
# Set a flag on the follow
|
||||||
follow = activity.get_object()
|
follow = activity.get_object_id()
|
||||||
_update_follow_status(follow, FollowStatus.ACCEPTED)
|
_update_follow_status(follow, FollowStatus.ACCEPTED)
|
||||||
|
|
||||||
|
|
||||||
@process_inbox.register
|
@process_inbox.register
|
||||||
def _reject_process_inbox(activity: ap.Reject, new_meta: _NewMeta) -> None:
|
def _reject_process_inbox(activity: ap.Reject, new_meta: _NewMeta) -> None:
|
||||||
_logger.info(f"process_inbox activity={activity!r}")
|
_logger.info(f"process_inbox activity={activity!r}")
|
||||||
follow = activity.get_object()
|
follow = activity.get_object_id()
|
||||||
_update_follow_status(follow, FollowStatus.REJECTED)
|
_update_follow_status(follow, FollowStatus.REJECTED)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue