diff options
author | Karen Konou <konoukaren@gmail.com> | 2019-02-03 20:12:23 +0100 |
---|---|---|
committer | Karen Konou <konoukaren@gmail.com> | 2019-02-03 20:12:23 +0100 |
commit | 0ef0ae35abf7c1f1016175bd446436f9e5dd8fc2 (patch) | |
tree | 098b8c52b36bfa2649c9fdb4fefec7a4cf03581a | |
parent | d5d91ae689e14103551dd3622e208ea31e40c858 (diff) | |
download | pleroma-0ef0ae35abf7c1f1016175bd446436f9e5dd8fc2.tar.gz |
added optional delist feature
-rw-r--r-- | config/config.exs | 4 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex | 30 |
2 files changed, 28 insertions, 6 deletions
diff --git a/config/config.exs b/config/config.exs index d0d53a64a..8b42a5351 100644 --- a/config/config.exs +++ b/config/config.exs @@ -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: [], diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index a3f516ae7..0b9caeb11 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -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 |