From acfded5ae8b5f9180aeebe9c942fb4a620f13a13 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 22 Jan 2022 15:53:08 -0600 Subject: MRF reasons: normalize config for backwards compatibility --- lib/pleroma/web/activity_pub/mrf.ex | 11 +++++++ lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 3 +- test/pleroma/web/activity_pub/mrf_test.exs | 37 ++++++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 89037ade7..a880b023f 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -4,6 +4,7 @@ defmodule Pleroma.Web.ActivityPub.MRF do require Logger + import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1] @behaviour Pleroma.Web.ActivityPub.MRF.PipelineFiltering @@ -110,6 +111,16 @@ def instance_list_from_tuples(list) do end) end + @spec normalize_instance_list(list()) :: [{String.t(), String.t()}] + def normalize_instance_list(list) do + Enum.map(list, fn + {host, reason} when not_empty_string(host) and not_empty_string(reason) -> {host, reason} + {host, _reason} when not_empty_string(host) -> {host, ""} + host when not_empty_string(host) -> {host, ""} + value -> raise "Invalid MRF config: #{inspect(value)}" + end) + end + def describe(policies) do {:ok, policy_configs} = policies diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index c631cc85f..14da5f52b 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -263,13 +263,14 @@ def describe do mrf_simple_excluded = Config.get(:mrf_simple) |> Enum.map(fn {rule, instances} -> + instances = MRF.normalize_instance_list(instances) {rule, Enum.reject(instances, fn {host, _} -> host in exclusions end)} end) mrf_simple = mrf_simple_excluded |> Enum.map(fn {rule, instances} -> - {rule, Enum.map(instances, fn {host, _} -> host end)} + {rule, MRF.instance_list_from_tuples(instances)} end) |> Map.new() diff --git a/test/pleroma/web/activity_pub/mrf_test.exs b/test/pleroma/web/activity_pub/mrf_test.exs index fd88435ff..e9c31ba24 100644 --- a/test/pleroma/web/activity_pub/mrf_test.exs +++ b/test/pleroma/web/activity_pub/mrf_test.exs @@ -79,9 +79,18 @@ test "it handles legacy config" do end end + describe "normalize_instance_list/1" do + test "returns a list of tuples" do + list = [{"some.tld", "a reason"}, "other.tld"] + expected = [{"some.tld", "a reason"}, {"other.tld", ""}] + + assert MRF.normalize_instance_list(list) == expected + end + end + describe "describe/0" do test "it works as expected with noop policy" do - clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.NoOpPolicy]) + clear_config([:mrf, :policies], [MRF.NoOpPolicy]) expected = %{ mrf_policies: ["NoOpPolicy", "HashtagPolicy"], @@ -112,6 +121,32 @@ test "it works as expected with mock policy" do {:ok, ^expected} = MRF.describe() end + + test "it works as expected with SimplePolicy" do + clear_config([:mrf, :policies], [MRF.SimplePolicy]) + clear_config([:mrf_simple, :reject], [{"lain.com", "2kool4skool"}, "othersite.xyz"]) + + expected = %{ + exclusions: false, + mrf_hashtag: %{federated_timeline_removal: [], reject: [], sensitive: ["nsfw"]}, + mrf_policies: ["SimplePolicy", "HashtagPolicy"], + mrf_simple: %{ + accept: [], + avatar_removal: [], + banner_removal: [], + federated_timeline_removal: [], + followers_only: [], + media_nsfw: [], + media_removal: [], + reject: ["lain.com", "othersite.xyz"], + reject_deletes: [], + report_removal: [] + }, + mrf_simple_info: %{reject: %{"lain.com" => %{"reason" => "2kool4skool"}}} + } + + {:ok, ^expected} = MRF.describe() + end end test "config_descriptions/0" do -- cgit v1.2.3