Skip to content
Snippets Groups Projects
Commit 0ef0ae35 authored by Karen Konou's avatar Karen Konou
Browse files

added optional delist feature

parent d5d91ae6
Branches
No related tags found
No related merge requests found
......@@ -227,7 +227,9 @@ config :pleroma, :mrf_rejectnonpublic,
allow_followersonly: false,
allow_direct: false
config :pleroma, :mrf_hellthread, threshold: 10
config :pleroma, :mrf_hellthread,
delist_threshold: 5,
reject_threshold: 10
config :pleroma, :mrf_simple,
media_removal: [],
......
......@@ -3,17 +3,37 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
alias Pleroma.User
@behaviour Pleroma.Web.ActivityPub.MRF
@impl true
def filter(%{"type" => "Create"} = object) do
threshold = Pleroma.Config.get([:mrf_hellthread, :threshold])
delist_threshold = Pleroma.Config.get([:mrf_hellthread, :delist_threshold])
reject_threshold = Pleroma.Config.get([:mrf_hellthread, :reject_threshold])
recipients = (object["to"] || []) ++ (object["cc"] || [])
if length(recipients) > threshold do
{:reject, nil}
else
{:ok, object}
cond do
length(recipients) > reject_threshold ->
{:reject, nil}
length(recipients) > delist_threshold ->
if Enum.member?(object["to"], "https://www.w3.org/ns/activitystreams#Public") or
Enum.member?(object["cc"], "https://www.w3.org/ns/activitystreams#Public") do
object
|> Kernel.update_in(["object", "to"], [
User.get_cached_by_ap_id(object["actor"].follower_address)
])
|> Kernel.update_in(["object", "cc"], ["https://www.w3.org/ns/activitystreams#Public"])
|> Kernel.update_in(["to"], [
User.get_cached_by_ap_id(object["actor"].follower_address)
])
|> Kernel.update_in(["cc"], ["https://www.w3.org/ns/activitystreams#Public"])
else
{:ok, object}
end
true ->
{:ok, object}
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment