summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2022-01-22 15:53:08 -0600
committerAlex Gleason <alex@alexgleason.me>2022-01-22 15:53:08 -0600
commitacfded5ae8b5f9180aeebe9c942fb4a620f13a13 (patch)
tree8bf9f30072813dce05940482dec0648b421ee521
parente72fd4ceb68294eb3cfb3b80bd78600143792b36 (diff)
MRF reasons: normalize config for backwards compatibilitymrf-tuples-fix
-rw-r--r--lib/pleroma/web/activity_pub/mrf.ex11
-rw-r--r--lib/pleroma/web/activity_pub/mrf/simple_policy.ex3
-rw-r--r--test/pleroma/web/activity_pub/mrf_test.exs37
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 @@ defmodule Pleroma.Web.ActivityPub.MRF 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 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy 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 @@ defmodule Pleroma.Web.ActivityPub.MRFTest 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 @@ defmodule Pleroma.Web.ActivityPub.MRFTest 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