Undoing: Move undoing announcements to the pipeline everywhere.
[akkoma] / lib / pleroma / user.ex
index b451202b255209cee0672c9ffd72e26c982ef5b7..aa675a521f68713449715248f4b7b3be145bbf86 100644 (file)
@@ -29,7 +29,9 @@ defmodule Pleroma.User do
   alias Pleroma.UserRelationship
   alias Pleroma.Web
   alias Pleroma.Web.ActivityPub.ActivityPub
+  alias Pleroma.Web.ActivityPub.Builder
   alias Pleroma.Web.ActivityPub.ObjectValidators.Types
+  alias Pleroma.Web.ActivityPub.Pipeline
   alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.CommonAPI.Utils, as: CommonUtils
@@ -1445,8 +1447,15 @@ defmodule Pleroma.User do
     end)
 
     delete_user_activities(user)
-    invalidate_cache(user)
-    Repo.delete(user)
+
+    if user.local do
+      user
+      |> change(%{deactivated: true, email: nil})
+      |> update_and_set_cache()
+    else
+      invalidate_cache(user)
+      Repo.delete(user)
+    end
   end
 
   def perform(:deactivate_async, user, status), do: deactivate(user, status)
@@ -1545,20 +1554,14 @@ defmodule Pleroma.User do
     |> ActivityPub.delete()
   end
 
-  defp delete_activity(%{data: %{"type" => "Like"}} = activity) do
-    object = Object.normalize(activity)
-
-    activity.actor
-    |> get_cached_by_ap_id()
-    |> ActivityPub.unlike(object)
-  end
+  defp delete_activity(%{data: %{"type" => type}} = activity) when type in ["Like", "Announce"] do
+    actor =
+      activity.actor
+      |> get_cached_by_ap_id()
 
-  defp delete_activity(%{data: %{"type" => "Announce"}} = activity) do
-    object = Object.normalize(activity)
+    {:ok, undo, _} = Builder.undo(actor, activity)
 
-    activity.actor
-    |> get_cached_by_ap_id()
-    |> ActivityPub.unannounce(object)
+    Pipeline.common_pipeline(undo, local: true)
   end
 
   defp delete_activity(_activity), do: "Doing nothing"