diff options
author | lambda <pleromagit@rogerbraun.net> | 2018-06-08 11:08:50 +0000 |
---|---|---|
committer | lambda <pleromagit@rogerbraun.net> | 2018-06-08 11:08:50 +0000 |
commit | bb639a362e42cba5a78e64e4c7fc0380fe25c414 (patch) | |
tree | 47a476116cad941504ecdf7c40d1a3cfac25a16c | |
parent | 4a16ade2ee14d9efb679de5c0b9a9d1cdc800170 (diff) | |
parent | e2c4013c88c71c31084abe7567a7f3ba81f16bfa (diff) | |
download | pleroma-bb639a362e42cba5a78e64e4c7fc0380fe25c414.tar.gz |
Merge branch 'feature/rejectnonpublic' into 'develop'
Add MRF to drop all posts with "followers-only" or "direct" privacy settings
See merge request pleroma/pleroma!202
-rw-r--r-- | lib/pleroma/web/activity_pub/mrf/reject_non_public.ex | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex new file mode 100644 index 000000000..879cbe6de --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex @@ -0,0 +1,29 @@ +defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do + alias Pleroma.User + @behaviour Pleroma.Web.ActivityPub.MRF + + @impl true + def filter(object) do + if object["type"] == "Create" do + user = User.get_cached_by_ap_id(object["actor"]) + public = "https://www.w3.org/ns/activitystreams#Public" + + # Determine visibility + visibility = + cond do + public in object["to"] -> "public" + public in object["cc"] -> "unlisted" + user.follower_address in object["to"] -> "followers" + true -> "direct" + end + + case visibility do + "public" -> {:ok, object} + "unlisted" -> {:ok, object} + _ -> {:reject, nil} + end + else + {:ok, object} + end + end +end |