add allow_followersonly and allow_direct options for configuring mrf_rejectnonpublic
authorsquidboi <squidboi@waifu.club>
Sun, 10 Jun 2018 23:40:51 +0000 (16:40 -0700)
committersquidboi <squidboi@waifu.club>
Sun, 10 Jun 2018 23:40:51 +0000 (16:40 -0700)
config/config.exs
lib/pleroma/web/activity_pub/mrf/reject_non_public.ex

index 3292bf29c6d83b1ef3c57969ee2bbdc48b8332b8..5e57af87b4927a8549e3723435590b59c8aa29cb 100644 (file)
@@ -59,6 +59,10 @@ config :pleroma, :instance,
 
 config :pleroma, :activitypub, accept_blocks: true
 
+config :pleroma, :mrf_rejectnonpublic,
+  allow_followersonly: false,
+  allow_direct: false
+
 config :pleroma, :mrf_simple,
   media_removal: [],
   media_nsfw: [],
index 879cbe6deb74ee2608d3e0beedfc7adaa4c034a7..b6936fe90081dceb854d6146b10578db87685858 100644 (file)
@@ -2,6 +2,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do
   alias Pleroma.User
   @behaviour Pleroma.Web.ActivityPub.MRF
 
+  @mrf_rejectnonpublic Application.get_env(:pleroma, :mrf_rejectnonpublic)
+  @allow_followersonly Keyword.get(@mrf_rejectnonpublic, :allow_followersonly)
+  @allow_direct Keyword.get(@mrf_rejectnonpublic, :allow_direct)
+
   @impl true
   def filter(object) do
     if object["type"] == "Create" do
@@ -18,9 +22,25 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do
         end
 
       case visibility do
-        "public" -> {:ok, object}
-        "unlisted" -> {:ok, object}
-        _ -> {:reject, nil}
+        "public" ->
+          {:ok, object}
+
+        "unlisted" ->
+          {:ok, object}
+
+        "followers" ->
+          with true <- @allow_followersonly do
+            {:ok, object}
+          else
+            _e -> {:reject, nil}
+          end
+
+        "direct" ->
+          with true <- @allow_direct do
+            {:ok, object}
+          else
+            _e -> {:reject, nil}
+          end
       end
     else
       {:ok, object}