diff --git a/lib/pleroma/web/activity_pub/mrf/ex_nihilo_nihil_fit.ex b/lib/pleroma/web/activity_pub/mrf/ex_nihilo_nihil_fit.ex index c7b1b1e18..e4b930676 100644 --- a/lib/pleroma/web/activity_pub/mrf/ex_nihilo_nihil_fit.ex +++ b/lib/pleroma/web/activity_pub/mrf/ex_nihilo_nihil_fit.ex @@ -54,13 +54,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.ExNihiloNihilFit do end end - @impl true - def filter(%{"actor" => actor} = object) do - with {:ok, object} <- check_avatar_rewrite(actor, object) do - {:ok, object} - end - end - @impl true def filter(%{"id" => actor, "type" => obj_type} = object) when obj_type in ["Application", "Group", "Organization", "Person", "Service"] do diff --git a/lib/pleroma/web/activity_pub/mrf/media_removal_per_actor.ex b/lib/pleroma/web/activity_pub/mrf/media_removal_per_actor.ex new file mode 100644 index 000000000..61a1d7bba --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/media_removal_per_actor.ex @@ -0,0 +1,61 @@ +defmodule Pleroma.Web.ActivityPub.MRF.MediaRemovalPerActor do + @moduledoc "Removes media per actor (replaces TagPolicy due to its lack of transparency)" + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + defp check_profile_media_removal(actor, object) do + if Enum.member?(Pleroma.Config.get([:mrf_media_removal_per_actor, :actors]), actor) do + {:ok, Map.delete(Map.delete(object, "icon"), "image")} + else + {:ok, object} + end + end + + defp check_media_removal(actor, object) do + if Enum.member?(Pleroma.Config.get([:mrf_media_removal_per_actor, :actors]), actor) do + {:ok, Map.delete(object, "attachment")} + else + {:ok, object} + end + end + + @impl true + def filter(%{"actor" => actor} = object) do + with {:ok, object} <- check_media_removal(actor, object) do + {:ok, object} + end + end + + @impl true + def filter(%{"id" => actor, "type" => obj_type} = object) + when obj_type in ["Application", "Group", "Organization", "Person", "Service"] do + with {:ok, object} <- check_profile_media_removal(actor, object) do + {:ok, object} + end + end + + @impl true + def describe do + {:ok, + %{mrf_media_removal_per_actor: + %{actors: Pleroma.Config.get([:mrf_media_removal_per_actor, :actors])} + } + } + end + + @impl true + def config_description do + %{ + key: :mrf_media_removal_per_actor, + related_policy: "Pleroma.Web.ActivityPub.MRF.MediaRemovalPerActor", + description: "Removes media per actor", + children: [ + %{ + key: :actors, + type: {:list, :string}, + label: "List of affected actors", + suggestions: ["https://instance.tld/users/pedophile"] + } + ] + } + end +end