mrf simple: add accept lists
authorWilliam Pitcock <nenolod@dereferenced.org>
Tue, 19 Jun 2018 21:23:37 +0000 (21:23 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Tue, 19 Jun 2018 21:28:24 +0000 (21:28 +0000)
accept lists supplement reject lists by requiring that any message accepted by contained
by the accept list.

in other words, this functionality can be used to implement instances similar to
awoo.space.

CONFIGURATION.md
config/config.exs
lib/pleroma/web/activity_pub/mrf/simple_policy.ex

index 4174dd114500a72837aa9639d1671962214337b1..6b2821b21d125b4aa32c88157620bcff7f5d7b65 100644 (file)
@@ -49,7 +49,8 @@ Restricts the visibility of posts from certain instances.
       media_removal: [],
       media_nsfw: [],
       federated_timeline_removal: [],
-      reject: []
+      reject: [],
+      accept: []
 
 * `media_removal`: posts from these instances will have attachments 
    removed
@@ -58,6 +59,7 @@ Restricts the visibility of posts from certain instances.
 * `federated_timeline_removal`: posts from these instances will be 
    marked as unlisted
 * `reject`: posts from these instances will be dropped
+* `accept`: if not empty, only posts from these instances will be accepted
 
 ### RejectNonPublic
 
index 5e57af87b4927a8549e3723435590b59c8aa29cb..6fc127d4c1c69c7276480d8d1dc3a2b0638e73f8 100644 (file)
@@ -67,7 +67,8 @@ config :pleroma, :mrf_simple,
   media_removal: [],
   media_nsfw: [],
   federated_timeline_removal: [],
-  reject: []
+  reject: [],
+  accept: []
 
 config :pleroma, :media_proxy,
   enabled: false,
index 8d770387db960fddc6c6b169c33573e955d99455..0a047013a8dd3964e2877da5587946e2b1960475 100644 (file)
@@ -4,6 +4,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
 
   @mrf_policy Application.get_env(:pleroma, :mrf_simple)
 
+  @accept Keyword.get(@mrf_policy, :accept)
+  defp check_accept(actor_info, object) do
+    if length(@accept) > 0 and not actor_info.host in @accept do
+      {:reject, nil}
+    else
+      {:ok, object}
+    end
+  end
+
   @reject Keyword.get(@mrf_policy, :reject)
   defp check_reject(actor_info, object) do
     if actor_info.host in @reject do
@@ -74,7 +83,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
   def filter(object) do
     actor_info = URI.parse(object["actor"])
 
-    with {:ok, object} <- check_reject(actor_info, object),
+    with {:ok, object} <- check_accept(actor_info, object),
+         {:ok, object} <- check_reject(actor_info, object),
          {:ok, object} <- check_media_removal(actor_info, object),
          {:ok, object} <- check_media_nsfw(actor_info, object),
          {:ok, object} <- check_ftl_removal(actor_info, object) do