Eh?
[akkoma] / lib / pleroma / object.ex
index 99c836309a9f7e7bfb71480e644962b0f63a9866..e2b64872785dfca64084526243028e235951d97d 100644 (file)
@@ -4,7 +4,7 @@
 
 defmodule Pleroma.Object do
   use Ecto.Schema
-  alias Pleroma.{Repo, Object, User, Activity, HTML}
+  alias Pleroma.{Repo, Object, User, Activity, ObjectTombstone}
   import Ecto.{Query, Changeset}
 
   schema "objects" do
@@ -66,45 +66,28 @@ defmodule Pleroma.Object do
     Object.change(%Object{}, %{data: %{"id" => context}})
   end
 
-  def delete(%Object{data: %{"id" => id}} = object) do
-    with Repo.delete(object),
-         Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
-         {:ok, true} <- Cachex.del(:object_cache, "object:#{id}") do
-      {:ok, object}
-    end
-  end
-
-  def get_cached_scrubbed_html(content, scrubbers, object) do
-    key = "#{generate_scrubber_signature(scrubbers)}|#{object.id}"
-    Cachex.fetch!(:scrubber_cache, key, fn _key -> ensure_scrubbed_html(content, scrubbers) end)
-  end
-
-  def get_cached_stripped_html(content, object) do
-    get_cached_scrubbed_html(content, HtmlSanitizeEx.Scrubber.StripTags, object)
+  def make_tombstone(%Object{data: %{"id" => id, "type" => type}}, deleted \\ DateTime.utc_now()) do
+    %ObjectTombstone{
+      id: id,
+      formerType: type,
+      deleted: deleted
+    }
+    |> Map.from_struct()
   end
 
-  def ensure_scrubbed_html(
-        content,
-        scrubbers
-      ) do
-    {:commit, HTML.filter_tags(content, scrubbers)}
-  end
+  def swap_object_with_tombstone(object) do
+    tombstone = make_tombstone(object)
 
-  defp generate_scrubber_signature(scrubber) when is_atom(scrubber) do
-    generate_scrubber_signature([scrubber])
+    object
+    |> Object.change(%{data: tombstone})
+    |> Repo.update()
   end
 
-  defp generate_scrubber_signature(scrubbers) do
-    Enum.reduce(scrubbers, "", fn scrubber, signature ->
-      # If a scrubber does not have a version(e.g HtmlSanitizeEx.Scrubber.StripTags) it is assumed it is always 0)
-      version =
-        if Kernel.function_exported?(scrubber, :version, 0) do
-          scrubber.version
-        else
-          0
-        end
-
-      "#{signature}#{to_string(scrubber)}#{version}"
-    end)
+  def delete(%Object{data: %{"id" => id}} = object) do
+    with {:ok, _obj} = swap_object_with_tombstone(object),
+         Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
+         {:ok, true} <- Cachex.del(:object_cache, "object:#{id}") do
+      {:ok, object}
+    end
   end
 end