logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

mrf_test.exs (4213B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.MRFTest do
  5. use ExUnit.Case
  6. use Pleroma.Tests.Helpers
  7. import ExUnit.CaptureLog
  8. alias Pleroma.Web.ActivityPub.MRF
  9. test "subdomains_regex/1" do
  10. assert MRF.subdomains_regex(["unsafe.tld", "*.unsafe.tld"]) == [
  11. ~r/^unsafe.tld$/i,
  12. ~r/^(.*\.)*unsafe.tld$/i
  13. ]
  14. end
  15. describe "subdomain_match/2" do
  16. test "common domains" do
  17. regexes = MRF.subdomains_regex(["unsafe.tld", "unsafe2.tld"])
  18. assert regexes == [~r/^unsafe.tld$/i, ~r/^unsafe2.tld$/i]
  19. assert MRF.subdomain_match?(regexes, "unsafe.tld")
  20. assert MRF.subdomain_match?(regexes, "unsafe2.tld")
  21. refute MRF.subdomain_match?(regexes, "example.com")
  22. end
  23. test "wildcard domains with one subdomain" do
  24. regexes = MRF.subdomains_regex(["*.unsafe.tld"])
  25. assert regexes == [~r/^(.*\.)*unsafe.tld$/i]
  26. assert MRF.subdomain_match?(regexes, "unsafe.tld")
  27. assert MRF.subdomain_match?(regexes, "sub.unsafe.tld")
  28. refute MRF.subdomain_match?(regexes, "anotherunsafe.tld")
  29. refute MRF.subdomain_match?(regexes, "unsafe.tldanother")
  30. end
  31. test "wildcard domains with two subdomains" do
  32. regexes = MRF.subdomains_regex(["*.unsafe.tld"])
  33. assert regexes == [~r/^(.*\.)*unsafe.tld$/i]
  34. assert MRF.subdomain_match?(regexes, "unsafe.tld")
  35. assert MRF.subdomain_match?(regexes, "sub.sub.unsafe.tld")
  36. refute MRF.subdomain_match?(regexes, "sub.anotherunsafe.tld")
  37. refute MRF.subdomain_match?(regexes, "sub.unsafe.tldanother")
  38. end
  39. test "matches are case-insensitive" do
  40. regexes = MRF.subdomains_regex(["UnSafe.TLD", "UnSAFE2.Tld"])
  41. assert regexes == [~r/^UnSafe.TLD$/i, ~r/^UnSAFE2.Tld$/i]
  42. assert MRF.subdomain_match?(regexes, "UNSAFE.TLD")
  43. assert MRF.subdomain_match?(regexes, "UNSAFE2.TLD")
  44. assert MRF.subdomain_match?(regexes, "unsafe.tld")
  45. assert MRF.subdomain_match?(regexes, "unsafe2.tld")
  46. refute MRF.subdomain_match?(regexes, "EXAMPLE.COM")
  47. refute MRF.subdomain_match?(regexes, "example.com")
  48. end
  49. @tag capture_log: true
  50. test "logs sensible error on accidental wildcard" do
  51. assert_raise Regex.CompileError, fn ->
  52. assert capture_log(MRF.subdomains_regex(["*unsafe.tld"])) =~
  53. "MRF: Invalid subdomain Regex: *unsafe.tld"
  54. end
  55. end
  56. end
  57. describe "instance_list_from_tuples/1" do
  58. test "returns a list of instances from a list of {instance, reason} tuples" do
  59. list = [{"some.tld", "a reason"}, {"other.tld", "another reason"}]
  60. expected = ["some.tld", "other.tld"]
  61. assert MRF.instance_list_from_tuples(list) == expected
  62. end
  63. end
  64. describe "describe/0" do
  65. test "it works as expected with noop policy" do
  66. clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.NoOpPolicy])
  67. expected = %{
  68. mrf_policies: ["NoOpPolicy", "HashtagPolicy"],
  69. mrf_hashtag: %{
  70. federated_timeline_removal: [],
  71. reject: [],
  72. sensitive: ["nsfw"]
  73. },
  74. exclusions: false
  75. }
  76. {:ok, ^expected} = MRF.describe()
  77. end
  78. test "it works as expected with mock policy" do
  79. clear_config([:mrf, :policies], [MRFModuleMock])
  80. expected = %{
  81. mrf_policies: ["MRFModuleMock", "HashtagPolicy"],
  82. mrf_module_mock: "some config data",
  83. mrf_hashtag: %{
  84. federated_timeline_removal: [],
  85. reject: [],
  86. sensitive: ["nsfw"]
  87. },
  88. exclusions: false
  89. }
  90. {:ok, ^expected} = MRF.describe()
  91. end
  92. end
  93. test "config_descriptions/0" do
  94. descriptions = MRF.config_descriptions()
  95. good_mrf = Enum.find(descriptions, fn %{key: key} -> key == :good_mrf end)
  96. assert good_mrf == %{
  97. key: :good_mrf,
  98. related_policy: "Fixtures.Modules.GoodMRF",
  99. label: "Good MRF",
  100. description: "Some description",
  101. group: :pleroma,
  102. tab: :mrf,
  103. type: :group
  104. }
  105. end
  106. end