Merge branch 'feature/suggestions-api-with-third-party-recommendation-engine' into...
[akkoma] / lib / pleroma / web / activity_pub / mrf / reject_non_public.ex
1 defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do
2 alias Pleroma.User
3 @behaviour Pleroma.Web.ActivityPub.MRF
4
5 @mrf_rejectnonpublic Application.get_env(:pleroma, :mrf_rejectnonpublic)
6 @allow_followersonly Keyword.get(@mrf_rejectnonpublic, :allow_followersonly)
7 @allow_direct Keyword.get(@mrf_rejectnonpublic, :allow_direct)
8
9 @impl true
10 def filter(object) do
11 if object["type"] == "Create" do
12 user = User.get_cached_by_ap_id(object["actor"])
13 public = "https://www.w3.org/ns/activitystreams#Public"
14
15 # Determine visibility
16 visibility =
17 cond do
18 public in object["to"] -> "public"
19 public in object["cc"] -> "unlisted"
20 user.follower_address in object["to"] -> "followers"
21 true -> "direct"
22 end
23
24 case visibility do
25 "public" ->
26 {:ok, object}
27
28 "unlisted" ->
29 {:ok, object}
30
31 "followers" ->
32 with true <- @allow_followersonly do
33 {:ok, object}
34 else
35 _e -> {:reject, nil}
36 end
37
38 "direct" ->
39 with true <- @allow_direct do
40 {:ok, object}
41 else
42 _e -> {:reject, nil}
43 end
44 end
45 else
46 {:ok, object}
47 end
48 end
49 end