SideEffects: Handle deletions.

This commit is contained in:
lain 2020-04-30 15:57:27 +02:00
parent 1fb383f368
commit 417eed4a2b
2 changed files with 33 additions and 3 deletions

View file

@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
""" """
alias Pleroma.Notification alias Pleroma.Notification
alias Pleroma.Object alias Pleroma.Object
alias Pleroma.User
alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Utils
def handle(object, meta \\ []) def handle(object, meta \\ [])
@ -33,10 +34,27 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do
# - Replace object with Tombstone # - Replace object with Tombstone
# - Set up notification # - Set up notification
def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do
with %Object{} = deleted_object <- Object.normalize(deleted_object), deleted_object =
{:ok, _, _} <- Object.delete(deleted_object) do Object.normalize(deleted_object, false) || User.get_cached_by_ap_id(deleted_object)
result =
case deleted_object do
%Object{} ->
with {:ok, _, _} <- Object.delete(deleted_object) do
:ok
end
%User{} ->
with {:ok, _} <- User.delete(deleted_object) do
:ok
end
end
if result == :ok do
Notification.create_notifications(object) Notification.create_notifications(object)
{:ok, object, meta} {:ok, object, meta}
else
{:error, result}
end end
end end

View file

@ -3,12 +3,15 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.SideEffectsTest do defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
use Oban.Testing, repo: Pleroma.Repo
use Pleroma.DataCase use Pleroma.DataCase
alias Pleroma.Activity alias Pleroma.Activity
alias Pleroma.Notification alias Pleroma.Notification
alias Pleroma.Object alias Pleroma.Object
alias Pleroma.Repo alias Pleroma.Repo
alias Pleroma.User
alias Pleroma.Tests.ObanHelpers
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.Builder
alias Pleroma.Web.ActivityPub.SideEffects alias Pleroma.Web.ActivityPub.SideEffects
@ -22,8 +25,10 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
{:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) {:ok, post} = CommonAPI.post(user, %{"status" => "hey"})
object = Object.normalize(post) object = Object.normalize(post)
{:ok, delete_data, _meta} = Builder.delete(user, object.data["id"]) {:ok, delete_data, _meta} = Builder.delete(user, object.data["id"])
{:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id)
{:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true) {:ok, delete, _meta} = ActivityPub.persist(delete_data, local: true)
%{user: user, delete: delete, post: post, object: object} {:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true)
%{user: user, delete: delete, post: post, object: object, delete_user: delete_user}
end end
test "it handles object deletions", %{delete: delete, post: post, object: object} do test "it handles object deletions", %{delete: delete, post: post, object: object} do
@ -36,6 +41,13 @@ test "it handles object deletions", %{delete: delete, post: post, object: object
assert object.data["type"] == "Tombstone" assert object.data["type"] == "Tombstone"
refute Activity.get_by_id(post.id) refute Activity.get_by_id(post.id)
end end
test "it handles user deletions", %{delete_user: delete, user: user} do
{:ok, _delete, _} = SideEffects.handle(delete)
ObanHelpers.perform_all()
refute User.get_cached_by_ap_id(user.ap_id)
end
end end
describe "like objects" do describe "like objects" do