diff options
| -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  | 
