summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2020-08-17 21:52:28 -0500
committerAlex Gleason <alex@alexgleason.me>2020-08-17 21:52:28 -0500
commitd55faa2f8fc3d613a3fa44b521fed27f8231c558 (patch)
treeedbee26df380397ad8bd6b19ed275b1fc55c5214
parent34b099fffa64c20d42c417abb06e0e32a5ad296a (diff)
Purge a local user upon deletion, fixes #2062
-rw-r--r--lib/pleroma/user.ex14
-rw-r--r--test/web/admin_api/controllers/admin_api_controller_test.exs25
2 files changed, 36 insertions, 3 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index ac065e9dc..a8bdcdad7 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1583,6 +1583,18 @@ defmodule Pleroma.User do
|> update_and_set_cache()
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
for user <- users, do: delete(user)
end
@@ -1610,7 +1622,7 @@ defmodule Pleroma.User do
_ ->
user
- |> change(%{deactivated: true, email: nil})
+ |> purge_user_changeset()
|> update_and_set_cache()
end
end
diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs
index 66d4b1ef3..f23d23e05 100644
--- a/test/web/admin_api/controllers/admin_api_controller_test.exs
+++ b/test/web/admin_api/controllers/admin_api_controller_test.exs
@@ -155,13 +155,28 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
describe "DELETE /api/pleroma/admin/users" do
test "single user", %{admin: admin, conn: conn} do
- user = insert(:user)
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
with_mock Pleroma.Web.Federator,
- publish: fn _ -> nil end do
+ publish: fn _ -> nil end,
+ perform: fn _, _ -> nil end do
conn =
conn
|> put_req_header("accept", "application/json")
@@ -181,6 +196,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
user = Repo.get(User, user.id)
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(:_))
end
end