Purge a local user upon deletion, fixes #2062

This commit is contained in:
Alex Gleason 2020-08-17 21:52:28 -05:00
parent 34b099fffa
commit d55faa2f8f
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
2 changed files with 36 additions and 3 deletions

View file

@ -1583,6 +1583,18 @@ def update_notification_settings(%User{} = user, settings) do
|> update_and_set_cache() |> update_and_set_cache()
end end
@spec purge_user_changeset(User.t()) :: Changeset.t()
def purge_user_changeset(user) do
change(user, %{
deactivated: true,
email: nil,
avatar: %{},
banner: %{},
background: %{},
fields: []
})
end
def delete(users) when is_list(users) do def delete(users) when is_list(users) do
for user <- users, do: delete(user) for user <- users, do: delete(user)
end end
@ -1610,7 +1622,7 @@ defp delete_or_deactivate(%User{local: true} = user) do
_ -> _ ->
user user
|> change(%{deactivated: true, email: nil}) |> purge_user_changeset()
|> update_and_set_cache() |> update_and_set_cache()
end end
end end

View file

@ -155,13 +155,28 @@ test "GET /api/pleroma/admin/users/:nickname requires " <>
describe "DELETE /api/pleroma/admin/users" do describe "DELETE /api/pleroma/admin/users" do
test "single user", %{admin: admin, conn: conn} do test "single user", %{admin: admin, conn: conn} do
user = insert(:user)
clear_config([:instance, :federating], true) clear_config([:instance, :federating], true)
user =
insert(:user,
avatar: %{"url" => [%{"href" => "https://someurl"}]},
banner: %{"url" => [%{"href" => "https://somebanner"}]}
)
# Create some activities to check they got deleted later
follower = insert(:user)
{:ok, _} = CommonAPI.post(user, %{status: "test"})
{:ok, _, _, _} = CommonAPI.follow(user, follower)
{:ok, _, _, _} = CommonAPI.follow(follower, user)
user = Repo.get(User, user.id)
assert user.note_count == 1
assert user.follower_count == 1
assert user.following_count == 1
refute user.deactivated refute user.deactivated
with_mock Pleroma.Web.Federator, with_mock Pleroma.Web.Federator,
publish: fn _ -> nil end do publish: fn _ -> nil end,
perform: fn _, _ -> nil end do
conn = conn =
conn conn
|> put_req_header("accept", "application/json") |> put_req_header("accept", "application/json")
@ -181,6 +196,12 @@ test "single user", %{admin: admin, conn: conn} do
user = Repo.get(User, user.id) user = Repo.get(User, user.id)
assert user.deactivated assert user.deactivated
assert user.avatar == %{}
assert user.banner == %{}
assert user.note_count == 0
assert user.follower_count == 0
assert user.following_count == 0
assert called(Pleroma.Web.Federator.publish(:_)) assert called(Pleroma.Web.Federator.publish(:_))
end end
end end