diff options
author | lain <lain@soykaf.club> | 2020-10-12 15:49:33 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-10-12 15:49:33 +0200 |
commit | d3552636ce546bd91458ac06a3e1772d90508070 (patch) | |
tree | f77d21923eba5e47229ca5cf4824319489d2372d | |
parent | bc3cf0fee0b93eb3cf8d2ba0f9a0dcc09b01331d (diff) | |
download | pleroma-d3552636ce546bd91458ac06a3e1772d90508070.tar.gz |
SideEffects: Don't delete a deleted object twice.2232-double-delete
-rw-r--r-- | lib/pleroma/web/activity_pub/side_effects.ex | 3 | ||||
-rw-r--r-- | test/web/activity_pub/side_effects_test.exs | 9 |
2 files changed, 12 insertions, 0 deletions
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 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do 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 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do {: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 |