MRF reasons: normalize config for backwards compatibility

This commit is contained in:
Alex Gleason 2022-01-22 15:53:08 -06:00
parent e72fd4ceb6
commit acfded5ae8
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
3 changed files with 49 additions and 2 deletions

View File

@ -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

View File

@ -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()

View File

@ -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