summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-06-29 21:45:38 -0500
committerAlex Gleason <alex@alexgleason.me>2021-06-29 21:45:38 -0500
commitbe2da95c36c14ac42eee4009c6e3e803bafd3d2c (patch)
tree2e76b7577d4614f25c97f9da8f4ccaf324ed10a7
parentb221d77a6da07c684bdbc63ddf4500e0d7ffeae8 (diff)
Correctly purge a remote user
-rw-r--r--lib/pleroma/user.ex16
-rw-r--r--test/pleroma/user_test.exs18
2 files changed, 28 insertions, 6 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 9942617d8..aebb5da95 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1713,6 +1713,12 @@ defmodule Pleroma.User do
})
end
+ def purge(%User{} = user) do
+ user
+ |> purge_user_changeset()
+ |> update_and_set_cache()
+ end
+
def delete(users) when is_list(users) do
for user <- users, do: delete(user)
end
@@ -1726,9 +1732,9 @@ defmodule Pleroma.User do
Repo.delete(user)
end
- defp delete_or_deactivate(%User{local: false} = user), do: delete_and_invalidate_cache(user)
+ defp delete_or_purge(%User{local: false} = user), do: purge(user)
- defp delete_or_deactivate(%User{local: true} = user) do
+ defp delete_or_purge(%User{local: true} = user) do
status = account_status(user)
case status do
@@ -1739,9 +1745,7 @@ defmodule Pleroma.User do
delete_and_invalidate_cache(user)
_ ->
- user
- |> purge_user_changeset()
- |> update_and_set_cache()
+ purge(user)
end
end
@@ -1769,7 +1773,7 @@ defmodule Pleroma.User do
delete_outgoing_pending_follow_requests(user)
- delete_or_deactivate(user)
+ delete_or_purge(user)
end
def perform(:set_activation_async, user, status), do: set_activation(user, status)
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index 6f5bcab57..529f837e8 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -1684,6 +1684,24 @@ defmodule Pleroma.UserTest do
} = user
end
+ test "delete/1 purges a remote user" do
+ user =
+ insert(:user, %{
+ name: "qqqqqqq",
+ avatar: %{"a" => "b"},
+ banner: %{"a" => "b"},
+ local: false
+ })
+
+ {:ok, job} = User.delete(user)
+ {:ok, _} = ObanHelpers.perform(job)
+ user = User.get_by_id(user.id)
+
+ assert user.name == nil
+ assert user.avatar == %{}
+ assert user.banner == %{}
+ end
+
test "get_public_key_for_ap_id fetches a user that's not in the db" do
assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")
end