forked from AkkomaGang/akkoma
SideEffects: Handle deletions.
This commit is contained in:
parent
1fb383f368
commit
417eed4a2b
2 changed files with 33 additions and 3 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue