add mrf for dropping follower-only and direct posts
[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 def filter(object) do
6 if object["type"] == "Create" do
7 user = User.get_by_ap_id(object["actor"])
8 public = "https://www.w3.org/ns/activitystreams#Public"
9
10 #Determine visibility
11 visibility =
12 cond do
13 #Public
14 public in object["to"] -> "p"
15 #Unlisted
16 public in object["cc"] -> "u"
17 #Followers-only
18 user.follower_address in object["to"] -> "f"
19 #Direct
20 true -> "d"
21 end
22
23 case visibility do
24 "p" -> {:ok, object}
25 "u" -> {:ok, object}
26 _ -> {:reject, nil}
27 end
28 else
29 {:ok, object}
30 end
31 end
32
33 end