MRF: add describe() to all modules, add base MRF configuration to base describe()
authorAriadne Conill <ariadne@dereferenced.org>
Tue, 13 Aug 2019 21:52:54 +0000 (21:52 +0000)
committerAriadne Conill <ariadne@dereferenced.org>
Tue, 13 Aug 2019 22:08:58 +0000 (22:08 +0000)
17 files changed:
lib/pleroma/web/activity_pub/mrf.ex
lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex
lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex
lib/pleroma/web/activity_pub/mrf/drop_policy.ex
lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex
lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
lib/pleroma/web/activity_pub/mrf/keyword_policy.ex
lib/pleroma/web/activity_pub/mrf/mediaproxy_warming_policy.ex
lib/pleroma/web/activity_pub/mrf/mention_policy.ex
lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex
lib/pleroma/web/activity_pub/mrf/noop_policy.ex
lib/pleroma/web/activity_pub/mrf/normalize_markup.ex
lib/pleroma/web/activity_pub/mrf/reject_non_public.ex
lib/pleroma/web/activity_pub/mrf/simple_policy.ex
lib/pleroma/web/activity_pub/mrf/subchain_policy.ex
lib/pleroma/web/activity_pub/mrf/tag_policy.ex
lib/pleroma/web/activity_pub/mrf/user_allowlist_policy.ex

index d43a8760b9246afbd6ce2de62c9a4136e80b0249..7533552d5744d41275a3d985194e4ee4028aa9f9 100644 (file)
@@ -39,15 +39,31 @@ defmodule Pleroma.Web.ActivityPub.MRF do
   @callback describe() :: {:ok | :error, Map.t()}
 
   def describe(policies) do
-    policies
-    |> Enum.reduce({:ok, %{}}, fn
-      policy, {:ok, data} ->
-        {:ok, policy_data} = policy.describe()
-        {:ok, Map.merge(data, policy_data)}
+    {:ok, policy_configs} =
+      policies
+      |> Enum.reduce({:ok, %{}}, fn
+        policy, {:ok, data} ->
+          {:ok, policy_data} = policy.describe()
+          {:ok, Map.merge(data, policy_data)}
 
-      _, error ->
-        error
-    end)
+        _, error ->
+          error
+      end)
+
+    mrf_policies =
+      get_policies()
+      |> Enum.map(fn policy -> to_string(policy) |> String.split(".") |> List.last() end)
+
+    exclusions = Pleroma.Config.get([:instance, :mrf_transparency_exclusions])
+
+    base =
+      %{
+        mrf_policies: mrf_policies,
+        exclusions: length(exclusions) > 0,
+      }
+      |> Map.merge(policy_configs)
+
+    {:ok, base}
   end
 
   def describe(), do: get_policies() |> describe()
index 87fa514c3ccfba585083d5356ba8a328bc3d71c6..ad2d9bf5411b83cc1c5886afc63175134ee958eb 100644 (file)
@@ -62,4 +62,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index 2da3eac2f975a722f492e4b22094b4f8bbee92bc..d2738659101d2140399ccfb3c5ae1f0e4cb868d8 100644 (file)
@@ -5,6 +5,8 @@
 defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
   alias Pleroma.User
 
+  @behaviour Pleroma.Web.ActivityPub.MRF
+
   require Logger
 
   # has the user successfully posted before?
@@ -22,6 +24,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
 
   defp contains_links?(_), do: false
 
+  @impl true
   def filter(%{"type" => "Create", "actor" => actor, "object" => object} = message) do
     with {:ok, %User{} = u} <- User.get_or_fetch_by_ap_id(actor),
          {:contains_links, true} <- {:contains_links, contains_links?(object)},
@@ -45,4 +48,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
 
   # in all other cases, pass through
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index b8d38aae696fb00a4ad8590159b2bd5cd1a32f1b..dcb640b122b3d56e5608f2338821fc4cfc70d96d 100644 (file)
@@ -12,4 +12,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.DropPolicy do
     Logger.info("REJECTING #{inspect(object)}")
     {:reject, object}
   end
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index 2d03df68afefd9943576d9ec5713d72015b2fd3a..df8dc88d51d1c6eea857700a8d543587caa55d3f 100644 (file)
@@ -39,4 +39,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrepended do
   end
 
   def filter(object), do: {:ok, object}
+
+  def describe(), do: {:ok, %{}}
 end
index 377987cf23a669752fb8d84348ffc926989a4e9d..ef717fa43c9adbc88ba5010511988680ad22aeb9 100644 (file)
@@ -90,4 +90,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{mrf_hellthread: Pleroma.Config.get([:mrf_hellthread])}}
 end
index 4eec8b916482e7940ee5838c66e81d5b289f0ff6..fbfe7a7eb3d1add80a2a97ce9f45814b126630f7 100644 (file)
@@ -96,4 +96,36 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe() do
+    # This horror is needed to convert regex sigils to strings
+    mrf_keyword =
+      Pleroma.Config.get(:mrf_keyword, [])
+      |> Enum.map(fn {key, value} ->
+        {key,
+         Enum.map(value, fn
+           {pattern, replacement} ->
+             %{
+               "pattern" =>
+                 if not is_binary(pattern) do
+                   inspect(pattern)
+                 else
+                   pattern
+                 end,
+               "replacement" => replacement
+             }
+
+           pattern ->
+             if not is_binary(pattern) do
+               inspect(pattern)
+             else
+               pattern
+             end
+         end)}
+      end)
+      |> Enum.into(%{})
+
+    {:ok, %{mrf_keyword: mrf_keyword}}
+  end
 end
index 01d21a299aa702b3272b86d3d65228bfd0299eb6..f38b427942fc820f45cd2b6f8b378e18ee1593bb 100644 (file)
@@ -53,4 +53,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index 1842e1aeb56359f7302921049d29c53fd9b388b0..49717d45de2a1c014505a421fb38d4de147121bf 100644 (file)
@@ -21,4 +21,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index 86a48bda58dc4a0c9e2e2b2f63a2142fc587d7b1..6fc9544a0518da8f4ba18832dce00fbd4136bd3b 100644 (file)
@@ -19,4 +19,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.NoPlaceholderTextPolicy do
 
   @impl true
   def filter(object), do: {:ok, object}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index c47cb329822feec531175b458af90e647add665b..19890ef0c14d3ee6e06c83da7d26057d3596dc10 100644 (file)
@@ -10,4 +10,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.NoOpPolicy do
   def filter(object) do
     {:ok, object}
   end
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index c269d0f892a0f399c7a820c4d2781bc71bc327ae..b684a3505a78276719823618fc33fec01b983bb3 100644 (file)
@@ -21,4 +21,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.NormalizeMarkup do
   end
 
   def filter(object), do: {:ok, object}
+
+  def describe(), do: {:ok, %{}}
 end
index 457b6ee1012a3e1c5cd03af5609f1e49c10f85ec..39ebf456a55828515c1b4abb6fdce4663d08aea3 100644 (file)
@@ -44,4 +44,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do
 
   @impl true
   def filter(object), do: {:ok, object}
+
+  @impl true
+  def describe(), do: {:ok, %{mrf_rejectnonpublic: Pleroma.Config.get([:mrf_rejectnonpublic])}}
 end
index f266457e31d89b26ad75b9c9a2f878daa7581516..89e0e3d5465719300fc5a22ca44ec66d66203c69 100644 (file)
@@ -177,4 +177,16 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
   end
 
   def filter(object), do: {:ok, object}
+
+  @impl true
+  def describe() do
+    exclusions = Pleroma.Config.get([:instance, :mrf_transparency_exclusions])
+
+    mrf_simple =
+      Pleroma.Config.get(:mrf_simple)
+      |> Enum.map(fn {k, v} -> {k, Enum.reject(v, fn v -> v in exclusions end)} end)
+      |> Enum.into(%{})
+
+    {:ok, %{mrf_simple: mrf_simple}}
+  end
 end
index 765704389769ccf21fb80946e0c0efed67f75cb3..b69410ca83da8fe6d2726f3b0120c3a2ff41ecb2 100644 (file)
@@ -37,4 +37,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index 70edf4f7f778748e4d91d6355c92f681873a76e9..95864156f9d6e33f5c088ba1f43c82bc482e9842 100644 (file)
@@ -165,4 +165,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do
 
   @impl true
   def filter(message), do: {:ok, message}
+
+  @impl true
+  def describe(), do: {:ok, %{}}
 end
index e35d2c422e1956971077397431c065da1c1944bf..c2597da8f5ff004e68adb332a05e930ac1f50715 100644 (file)
@@ -32,4 +32,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy do
   end
 
   def filter(object), do: {:ok, object}
+
+  @impl true
+  def describe() do
+    mrf_user_allowlist =
+      Config.get([:mrf_user_allowlist], [])
+      |> Enum.into(%{}, fn {k, v} -> {k, length(v)} end)
+
+    {:ok, %{mrf_user_allowlist: mrf_user_allowlist}}
+  end
 end