Merge branch 'fix/normalize-file-extension' into 'develop'
[akkoma] / lib / pleroma / web / activity_pub / mrf / reject_non_public.ex
index eb9580445c0c5cfab7cfc1e80036fb9001db3b2d..b6936fe90081dceb854d6146b10578db87685858 100644 (file)
@@ -2,32 +2,48 @@ 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
-      user = User.get_by_ap_id(object["actor"])
+      user = User.get_cached_by_ap_id(object["actor"])
       public = "https://www.w3.org/ns/activitystreams#Public"
 
-      #Determine visibility
+      # Determine visibility
       visibility =
         cond do
-          #Public
-          public in object["to"] -> "p"
-          #Unlisted
-          public in object["cc"] -> "u"
-          #Followers-only
-          user.follower_address in object["to"] -> "f"
-          #Direct
-          true -> "d"
+          public in object["to"] -> "public"
+          public in object["cc"] -> "unlisted"
+          user.follower_address in object["to"] -> "followers"
+          true -> "direct"
         end
 
       case visibility do
-        "p" -> {:ok, object}
-        "u" -> {: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}
     end
   end
-
 end