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

added optional delist feature

parent d5d91ae6
No related branches found
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.
Finish editing this message first!
Please register or to comment