1
0

MediaRemovalPerActor policy

This commit is contained in:
Mint
2023-04-02 17:54:24 +03:00
parent 79f6e52c5d
commit 980d7eec8a
2 changed files with 61 additions and 7 deletions
@@ -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
@@ -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