Compare commits
2 Commits
develop
...
mrf-tuples
Author | SHA1 | Date |
---|---|---|
Alex Gleason | acfded5ae8 | |
Alex Gleason | e72fd4ceb6 |
|
@ -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
|
||||
|
||||
|
@ -104,7 +105,20 @@ def subdomain_match?(domains, host) do
|
|||
|
||||
@spec instance_list_from_tuples([{String.t(), String.t()}]) :: [String.t()]
|
||||
def instance_list_from_tuples(list) do
|
||||
Enum.map(list, fn {instance, _} -> instance end)
|
||||
Enum.map(list, fn
|
||||
{instance, _} -> instance
|
||||
instance when is_binary(instance) -> instance
|
||||
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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -70,11 +70,27 @@ test "returns a list of instances from a list of {instance, reason} tuples" do
|
|||
|
||||
assert MRF.instance_list_from_tuples(list) == expected
|
||||
end
|
||||
|
||||
test "it handles legacy config" do
|
||||
list = [{"some.tld", "a reason"}, "other.tld"]
|
||||
expected = ["some.tld", "other.tld"]
|
||||
|
||||
assert MRF.instance_list_from_tuples(list) == expected
|
||||
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"],
|
||||
|
@ -105,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
|
||||
|
|
Loading…
Reference in New Issue