summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2019-05-22 04:55:16 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2019-05-22 18:53:12 +0000
commitbaf72d6c580e5c05ef5fea8a57c57150a5d38589 (patch)
tree84542ddf29521a64987193d11539200529102b01
parent60f882b09f5f837546d59f8eef56b905e065ec60 (diff)
downloadpleroma-baf72d6c580e5c05ef5fea8a57c57150a5d38589.tar.gz
pleroma-baf72d6c580e5c05ef5fea8a57c57150a5d38589.zip
mrf: simple policy: add the ability to strip avatars and banners from user profiles
-rw-r--r--config/config.exs4
-rw-r--r--lib/pleroma/web/activity_pub/mrf/simple_policy.ex32
2 files changed, 35 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs
index 33b7e713d..e90821d66 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -314,7 +314,9 @@ config :pleroma, :mrf_simple,
federated_timeline_removal: [],
report_removal: [],
reject: [],
- accept: []
+ accept: [],
+ avatar_removal: [],
+ banner_removal: []
config :pleroma, :mrf_keyword,
reject: [],
diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
index ffaa4b7db..890d70a7a 100644
--- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
+++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
@@ -104,6 +104,26 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
defp check_report_removal(_actor_info, object), do: {:ok, object}
+ defp check_avatar_removal(%{host: actor_host} = _actor_info, %{"icon" => _icon} = object) do
+ if actor_host in Pleroma.Config.get([:mrf_simple, :avatar_removal]) do
+ {:ok, Map.delete(object, "icon")}
+ else
+ {:ok, object}
+ end
+ end
+
+ defp check_avatar_removal(_actor_info, object), do: {:ok, object}
+
+ defp check_banner_removal(%{host: actor_host} = _actor_info, %{"image" => _image} = object) do
+ if actor_host in Pleroma.Config.get([:mrf_simple, :banner_removal]) do
+ {:ok, Map.delete(object, "image")}
+ else
+ {:ok, object}
+ end
+ end
+
+ defp check_banner_removal(_actor_info, object), do: {:ok, object}
+
@impl true
def filter(%{"actor" => actor} = object) do
actor_info = URI.parse(actor)
@@ -120,5 +140,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
end
end
+ def filter(%{"id" => actor, "type" => obj_type} = object)
+ when obj_type in ["Application", "Group", "Organization", "Person", "Service"] do
+ actor_info = URI.parse(actor)
+
+ with {:ok, object} <- check_avatar_removal(actor_info, object),
+ {:ok, object} <- check_banner_removal(actor_info, object) do
+ {:ok, object}
+ else
+ _e -> {:reject, nil}
+ end
+ end
+
def filter(object), do: {:ok, object}
end