Fix deactivated user deletion

This commit is contained in:
Maxim Filippov 2019-08-09 23:05:28 +03:00
commit dfae61c25c
7 changed files with 36 additions and 26 deletions

View file

@ -403,11 +403,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end
def delete(%User{ap_id: ap_id, follower_address: follower_address} = user) do
def delete(data, opts \\ %{actor: nil, local: true})
def delete(%User{ap_id: ap_id, follower_address: follower_address} = user, opts) do
with data <- %{
"to" => [follower_address],
"type" => "Delete",
"actor" => ap_id,
"actor" => opts[:actor] || ap_id,
"object" => %{"type" => "Person", "id" => ap_id}
},
{:ok, activity} <- insert(data, true, true),
@ -416,7 +418,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end
def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, local \\ true) do
def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, opts) do
user = User.get_cached_by_ap_id(actor)
to = (object.data["to"] || []) ++ (object.data["cc"] || [])
@ -428,7 +430,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
"to" => to,
"deleted_activity_id" => activity && activity.id
},
{:ok, activity} <- insert(data, local, false),
{:ok, activity} <- insert(data, opts[:local], false),
stream_out_participations(object, user),
_ <- decrease_replies_count_if_reply(object),
# Changing note count prior to enqueuing federation task in order to avoid

View file

@ -649,7 +649,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
{:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor),
{:ok, object} <- get_obj_helper(object_id),
:ok <- Containment.contain_origin(actor.ap_id, object.data),
{:ok, activity} <- ActivityPub.delete(object, false) do
{:ok, activity} <- ActivityPub.delete(object, local: false) do
{:ok, activity}
else
nil ->

View file

@ -25,9 +25,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
action_fallback(:errors)
def user_delete(conn, %{"nickname" => nickname}) do
def user_delete(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do
User.get_cached_by_nickname(nickname)
|> User.delete()
|> User.delete(admin.ap_id)
conn
|> json(nickname)

View file

@ -11,7 +11,7 @@ defmodule Pleroma.Web.OStatus.DeleteHandler do
def handle_delete(entry, _doc \\ nil) do
with id <- XML.string_from_xpath("//id", entry),
%Object{} = object <- Object.normalize(id),
{:ok, delete} <- ActivityPub.delete(object, false) do
{:ok, delete} <- ActivityPub.delete(object, local: false) do
delete
end
end