Correctly purge a remote user
authorAlex Gleason <alex@alexgleason.me>
Wed, 30 Jun 2021 02:45:38 +0000 (21:45 -0500)
committerAlex Gleason <alex@alexgleason.me>
Wed, 30 Jun 2021 02:45:38 +0000 (21:45 -0500)
lib/pleroma/user.ex
test/pleroma/user_test.exs

index 9942617d87d655e9ff507e2a1074b5ecf83b2856..aebb5da956c2b8a41eb01af510d769e963c9e78b 100644 (file)
@@ -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)
index 6f5bcab57c017b3a3542a5e8a96fee43f7565bbb..529f837e88311c5ac324f88e2072a3dbf80e6daf 100644 (file)
@@ -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