diff options
Diffstat (limited to 'users')
| -rw-r--r-- | users/views/activitypub.py | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/users/views/activitypub.py b/users/views/activitypub.py index b155b08..93a6eae 100644 --- a/users/views/activitypub.py +++ b/users/views/activitypub.py @@ -145,9 +145,21 @@ class Inbox(View):          # This ensures that the signature used for the headers matches the actor          # described in the payload.          identity = Identity.by_actor_uri(document["actor"], create=True, transient=True) +        if ( +            document["type"] == "Delete" +            and document["actor"] == document["object"] +            and not identity.pk +        ): +            # We don't have an Identity record for the user. No-op +            exceptions.capture_message( +                f"Inbox: Discarded delete message for unknown actor {document['actor']}" +            ) +            return HttpResponse(status=202) +          if not identity.public_key:              # See if we can fetch it right now              async_to_sync(identity.fetch_actor)() +          if not identity.public_key:              exceptions.capture_message(                  f"Inbox error: cannot fetch actor {document['actor']}" @@ -160,6 +172,7 @@ class Inbox(View):                  f"Inbox: Discarded message from {identity.domain}"              )              return HttpResponse(status=202) +          # If there's a "signature" payload, verify against that          if "signature" in document:              try:  | 
