diff options
| author | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2019-07-22 14:33:58 +0000 | 
|---|---|---|
| committer | kaniini <ariadne@dereferenced.org> | 2019-07-22 14:33:58 +0000 | 
| commit | b70e659304ba35f7afc598c3d3d1b96fa16f6cdf (patch) | |
| tree | d613f6ff88b2886876dab78475a0dce5bd69ec2b /test/web/activity_pub | |
| parent | 674ad5e1df0a001455090279229f186cbbdf1c94 (diff) | |
| download | pleroma-b70e659304ba35f7afc598c3d3d1b96fa16f6cdf.tar.gz pleroma-b70e659304ba35f7afc598c3d3d1b96fa16f6cdf.zip | |
Feature/1087 wildcard option for blocks
Diffstat (limited to 'test/web/activity_pub')
| -rw-r--r-- | test/web/activity_pub/mrf/mrf_test.exs | 46 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/simple_policy_test.exs | 93 | 
2 files changed, 139 insertions, 0 deletions
| diff --git a/test/web/activity_pub/mrf/mrf_test.exs b/test/web/activity_pub/mrf/mrf_test.exs new file mode 100644 index 000000000..a9cdf5317 --- /dev/null +++ b/test/web/activity_pub/mrf/mrf_test.exs @@ -0,0 +1,46 @@ +defmodule Pleroma.Web.ActivityPub.MRFTest do +  use ExUnit.Case, async: true +  alias Pleroma.Web.ActivityPub.MRF + +  test "subdomains_regex/1" do +    assert MRF.subdomains_regex(["unsafe.tld", "*.unsafe.tld"]) == [ +             ~r/^unsafe.tld$/, +             ~r/^(.*\.)*unsafe.tld$/ +           ] +  end + +  describe "subdomain_match/2" do +    test "common domains" do +      regexes = MRF.subdomains_regex(["unsafe.tld", "unsafe2.tld"]) + +      assert regexes == [~r/^unsafe.tld$/, ~r/^unsafe2.tld$/] + +      assert MRF.subdomain_match?(regexes, "unsafe.tld") +      assert MRF.subdomain_match?(regexes, "unsafe2.tld") + +      refute MRF.subdomain_match?(regexes, "example.com") +    end + +    test "wildcard domains with one subdomain" do +      regexes = MRF.subdomains_regex(["*.unsafe.tld"]) + +      assert regexes == [~r/^(.*\.)*unsafe.tld$/] + +      assert MRF.subdomain_match?(regexes, "unsafe.tld") +      assert MRF.subdomain_match?(regexes, "sub.unsafe.tld") +      refute MRF.subdomain_match?(regexes, "anotherunsafe.tld") +      refute MRF.subdomain_match?(regexes, "unsafe.tldanother") +    end + +    test "wildcard domains with two subdomains" do +      regexes = MRF.subdomains_regex(["*.unsafe.tld"]) + +      assert regexes == [~r/^(.*\.)*unsafe.tld$/] + +      assert MRF.subdomain_match?(regexes, "unsafe.tld") +      assert MRF.subdomain_match?(regexes, "sub.sub.unsafe.tld") +      refute MRF.subdomain_match?(regexes, "sub.anotherunsafe.tld") +      refute MRF.subdomain_match?(regexes, "sub.unsafe.tldanother") +    end +  end +end diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 0fd68e103..8e86d2219 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -49,6 +49,19 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :media_removal], ["*.remote.instance"]) +      media_message = build_media_message() +      local_message = build_local_message() + +      assert SimplePolicy.filter(media_message) == +               {:ok, +                media_message +                |> Map.put("object", Map.delete(media_message["object"], "attachment"))} + +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +    end    end    describe "when :media_nsfw" do @@ -74,6 +87,20 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :media_nsfw], ["*.remote.instance"]) +      media_message = build_media_message() +      local_message = build_local_message() + +      assert SimplePolicy.filter(media_message) == +               {:ok, +                media_message +                |> put_in(["object", "tag"], ["foo", "nsfw"]) +                |> put_in(["object", "sensitive"], true)} + +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +    end    end    defp build_media_message do @@ -106,6 +133,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(report_message) == {:reject, nil}        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end + +    test "match with wildcard domain" 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 @@ -146,6 +182,27 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end +    test "match with wildcard domain" do +      {actor, ftl_message} = build_ftl_actor_and_message() + +      ftl_message_actor_host = +        ftl_message +        |> Map.fetch!("actor") +        |> URI.parse() +        |> Map.fetch!(:host) + +      Config.put([:mrf_simple, :federated_timeline_removal], ["*." <> ftl_message_actor_host]) +      local_message = build_local_message() + +      assert {:ok, ftl_message} = SimplePolicy.filter(ftl_message) +      assert actor.follower_address in ftl_message["to"] +      refute actor.follower_address in ftl_message["cc"] +      refute "https://www.w3.org/ns/activitystreams#Public" in ftl_message["to"] +      assert "https://www.w3.org/ns/activitystreams#Public" in ftl_message["cc"] + +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +    end +      test "has a matching host but only as:Public in to" do        {_actor, ftl_message} = build_ftl_actor_and_message() @@ -192,6 +249,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(remote_message) == {:reject, nil}      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :reject], ["*.remote.instance"]) + +      remote_message = build_remote_message() + +      assert SimplePolicy.filter(remote_message) == {:reject, nil} +    end    end    describe "when :accept" do @@ -224,6 +289,16 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}        assert SimplePolicy.filter(remote_message) == {:ok, remote_message}      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :accept], ["*.remote.instance"]) + +      local_message = build_local_message() +      remote_message = build_remote_message() + +      assert SimplePolicy.filter(local_message) == {:ok, local_message} +      assert SimplePolicy.filter(remote_message) == {:ok, remote_message} +    end    end    describe "when :avatar_removal" do @@ -251,6 +326,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        refute filtered["icon"]      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :avatar_removal], ["*.remote.instance"]) + +      remote_user = build_remote_user() +      {:ok, filtered} = SimplePolicy.filter(remote_user) + +      refute filtered["icon"] +    end    end    describe "when :banner_removal" do @@ -278,6 +362,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        refute filtered["image"]      end + +    test "match with wildcard domain" do +      Config.put([:mrf_simple, :banner_removal], ["*.remote.instance"]) + +      remote_user = build_remote_user() +      {:ok, filtered} = SimplePolicy.filter(remote_user) + +      refute filtered["image"] +    end    end    defp build_local_message do | 
