diff options
| -rw-r--r-- | config/config.exs | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 13 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/simple_policy_test.exs | 28 | 
3 files changed, 41 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs index 9a10b0ff7..bab47a8a2 100644 --- a/config/config.exs +++ b/config/config.exs @@ -298,6 +298,7 @@ config :pleroma, :mrf_simple,    media_removal: [],    media_nsfw: [],    federated_timeline_removal: [], +  report_removal: [],    reject: [],    accept: [] diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 9627c3400..7190652d2 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -94,6 +94,16 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do      {:ok, object}    end +  defp check_report_removal(%{host: actor_host} = _actor_info, %{"type" => "Flag"} = object) do +    if actor_host in Pleroma.Config.get([:mrf_simple, :report_removal]) do +      {:reject, nil} +    else +      {:ok, object} +    end +  end + +  defp check_report_removal(_actor_info, object), do: {:ok, object} +    @impl true    def filter(object) do      actor_info = URI.parse(object["actor"]) @@ -102,7 +112,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do           {: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 +         {:ok, object} <- check_ftl_removal(actor_info, object), +         {:ok, object} <- check_report_removal(actor_info, object) do        {:ok, object}      else        _e -> {:reject, nil} diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 1e0511975..74af7dcde 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -15,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        media_removal: [],        media_nsfw: [],        federated_timeline_removal: [], +      report_removal: [],        reject: [],        accept: []      ) @@ -85,6 +86,33 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do      }    end +  describe "when :report_removal" do +    test "is empty" do +      Config.put([:mrf_simple, :report_removal], []) +      report_message = build_report_message() +      local_message = build_local_message() + +      assert SimplePolicy.filter(report_message) == {:ok, report_message} +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +    end + +    test "has a matching host" do +      Config.put([:mrf_simple, :report_removal], ["remote.instance"]) +      report_message = build_report_message() +      local_message = build_local_message() + +      assert SimplePolicy.filter(report_message) == {:reject, nil} +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +    end +  end + +  defp build_report_message do +    %{ +      "actor" => "https://remote.instance/users/bob", +      "type" => "Flag" +    } +  end +    describe "when :federated_timeline_removal" do      test "is empty" do        Config.put([:mrf_simple, :federated_timeline_removal], [])  | 
