mirror of
https://git.sr.ht/~tsileo/microblog.pub
synced 2024-12-22 13:14:28 +00:00
Prevent processing duplicate objects
This commit is contained in:
parent
928bdafeea
commit
96eae971b8
1 changed files with 18 additions and 1 deletions
19
app/boxes.py
19
app/boxes.py
|
@ -1524,6 +1524,7 @@ async def _handle_create_activity(
|
||||||
from_actor: models.Actor,
|
from_actor: models.Actor,
|
||||||
create_activity: models.InboxObject,
|
create_activity: models.InboxObject,
|
||||||
forwarded_by_actor: models.Actor | None = None,
|
forwarded_by_actor: models.Actor | None = None,
|
||||||
|
relates_to_inbox_object: models.InboxObject | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.info("Processing Create activity")
|
logger.info("Processing Create activity")
|
||||||
|
|
||||||
|
@ -1535,6 +1536,10 @@ async def _handle_create_activity(
|
||||||
await db_session.delete(create_activity)
|
await db_session.delete(create_activity)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if relates_to_inbox_object:
|
||||||
|
logger.warning(f"{relates_to_inbox_object.ap_id} is already in the inbox")
|
||||||
|
return None
|
||||||
|
|
||||||
wrapped_object = ap.unwrap_activity(create_activity.ap_object)
|
wrapped_object = ap.unwrap_activity(create_activity.ap_object)
|
||||||
if create_activity.actor.ap_id != ap.get_actor_id(wrapped_object):
|
if create_activity.actor.ap_id != ap.get_actor_id(wrapped_object):
|
||||||
raise ValueError("Object actor does not match activity")
|
raise ValueError("Object actor does not match activity")
|
||||||
|
@ -1585,6 +1590,14 @@ async def _handle_read_activity(
|
||||||
if not wrapped_object_actor.is_blocked:
|
if not wrapped_object_actor.is_blocked:
|
||||||
ro = RemoteObject(wrapped_object, actor=wrapped_object_actor)
|
ro = RemoteObject(wrapped_object, actor=wrapped_object_actor)
|
||||||
|
|
||||||
|
# Check if we already know about this object
|
||||||
|
if await get_inbox_object_by_ap_id(
|
||||||
|
db_session,
|
||||||
|
ro.ap_id,
|
||||||
|
):
|
||||||
|
logger.info(f"{ro.ap_id} is already in the inbox, skipping processing")
|
||||||
|
return None
|
||||||
|
|
||||||
# Then process it likes it's coming from a forwarded activity
|
# Then process it likes it's coming from a forwarded activity
|
||||||
await _process_note_object(db_session, read_activity, wrapped_object_actor, ro)
|
await _process_note_object(db_session, read_activity, wrapped_object_actor, ro)
|
||||||
|
|
||||||
|
@ -2076,7 +2089,11 @@ async def save_to_inbox(
|
||||||
|
|
||||||
if activity_ro.ap_type == "Create":
|
if activity_ro.ap_type == "Create":
|
||||||
await _handle_create_activity(
|
await _handle_create_activity(
|
||||||
db_session, actor, inbox_object, forwarded_by_actor=forwarded_by_actor
|
db_session,
|
||||||
|
actor,
|
||||||
|
inbox_object,
|
||||||
|
forwarded_by_actor=forwarded_by_actor,
|
||||||
|
relates_to_inbox_object=relates_to_inbox_object,
|
||||||
)
|
)
|
||||||
elif activity_ro.ap_type == "Read":
|
elif activity_ro.ap_type == "Read":
|
||||||
await _handle_read_activity(db_session, actor, inbox_object)
|
await _handle_read_activity(db_session, actor, inbox_object)
|
||||||
|
|
Loading…
Reference in a new issue