From d3552636ce546bd91458ac06a3e1772d90508070 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 12 Oct 2020 15:49:33 +0200 Subject: SideEffects: Don't delete a deleted object twice. --- lib/pleroma/web/activity_pub/side_effects.ex | 3 +++ test/web/activity_pub/side_effects_test.exs | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index b9a83a544..a3db72a4c 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -253,6 +253,9 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, result = case deleted_object do + %Object{data: %{"type" => "Tombstone"}} -> + :ok + %Object{} -> with {:ok, deleted_object, activity} <- Object.delete(deleted_object), {_, actor} when is_binary(actor) <- {:actor, deleted_object.data["actor"]}, diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 9efbaad04..4c8ed5aed 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -238,6 +238,15 @@ test "it logs issues with objects deletion", %{ {:error, :no_object_actor} = SideEffects.handle(delete) end) =~ "object doesn't have an actor" end + + test "it works with double deletions", %{ + delete: delete, + object: object + } do + assert {:ok, activity, _} = SideEffects.handle(delete) + Object.invalid_object_cache(object) + assert {:ok, ^activity, _} = SideEffects.handle(delete) + end end describe "EmojiReact objects" do -- cgit v1.2.3