diff --git a/activitypub.py b/activitypub.py index a0fb69f..904231a 100644 --- a/activitypub.py +++ b/activitypub.py @@ -171,8 +171,9 @@ class ActivityPub(Protocol): try: key_actor = cls.get_object(keyId, user=user).as2 except BadGateway: - if (activity.get('type') == 'Delete' and - fragmentless(keyId) == fragmentless(activity.get('object'))): + obj_id = as1.get_object(activity).get('id') + if (activity.get('type') == 'Delete' and obj_id and + fragmentless(keyId) == fragmentless(obj_id)): logging.info("Object/actor being deleted is also keyId; ignoring") abort(202, 'OK') raise diff --git a/tests/test_activitypub.py b/tests/test_activitypub.py index 2b58d3d..e876658 100644 --- a/tests/test_activitypub.py +++ b/tests/test_activitypub.py @@ -902,6 +902,17 @@ class ActivityPubTest(testutil.TestCase): got = self.post('/inbox', json={**DELETE, 'object': 'http://my/key/id'}) self.assertEqual(202, got.status_code) + def test_delete_actor_object_not_stored(self, _, mock_get, ___): + self.key_id_obj.delete() + Protocol.get_object.cache.clear() + + mock_get.return_value = requests_response(status=410) + got = self.post('/inbox', json={ + **DELETE, + 'object': {'id': 'http://my/key/id'}, + }) + self.assertEqual(202, got.status_code) + def test_delete_note(self, _, mock_get, ___): obj = Object(id='http://an/obj', as2={}) obj.put()