X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fmrf%2Fsimple_policy.ex;h=49caef5b279835b20c61faf18d94448d5dfc6c44;hb=97253df3ee0b38256ac19ebfafebbc69b162b14c;hp=8d770387db960fddc6c6b169c33573e955d99455;hpb=f3a71f2986fc0787c03bec786e772353e99ae9f9;p=akkoma diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 8d770387d..49caef5b2 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -4,6 +4,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do @mrf_policy Application.get_env(:pleroma, :mrf_simple) + @accept Keyword.get(@mrf_policy, :accept) + defp check_accept(actor_info, object) do + if length(@accept) > 0 and not (actor_info.host in @accept) do + {:reject, nil} + else + {:ok, object} + end + end + @reject Keyword.get(@mrf_policy, :reject) defp check_reject(actor_info, object) do if actor_info.host in @reject do @@ -14,7 +23,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do end @media_removal Keyword.get(@mrf_policy, :media_removal) - defp check_media_removal(actor_info, object) do + defp check_media_removal(actor_info, %{"type" => activity_type} = object) + when activity_type == "Create" do if actor_info.host in @media_removal do child_object = Map.delete(object["object"], "attachment") object = Map.put(object, "object", child_object) @@ -24,8 +34,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do end end + defp check_media_removal(actor_info, object), do: {:ok, object} + @media_nsfw Keyword.get(@mrf_policy, :media_nsfw) - defp check_media_nsfw(actor_info, object) do + defp check_media_nsfw(actor_info, %{"type" => activity_type} = object) + when activity_type == "Create" do child_object = object["object"] if actor_info.host in @media_nsfw and child_object["attachment"] != nil and @@ -40,6 +53,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do end end + defp check_media_nsfw(actor_info, object), do: {:ok, object} + @ftl_removal Keyword.get(@mrf_policy, :federated_timeline_removal) defp check_ftl_removal(actor_info, object) do if actor_info.host in @ftl_removal do @@ -74,7 +89,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do def filter(object) do actor_info = URI.parse(object["actor"]) - with {:ok, object} <- check_reject(actor_info, object), + with {:ok, object} <- check_accept(actor_info, object), + {:ok, object} <- check_reject(actor_info, object), {:ok, object} <- check_media_removal(actor_info, object), {:ok, object} <- check_media_nsfw(actor_info, object), {:ok, object} <- check_ftl_removal(actor_info, object) do