From e10cda7541f5d76a32d0bf27d90a51c5fc8e7fcf Mon Sep 17 00:00:00 2001 From: Karen Konou Date: Sun, 3 Feb 2019 22:46:06 +0100 Subject: [PATCH] implemented tweaks --- docs/config.md | 2 +- lib/pleroma/config/deprecation_warnings.ex | 7 +++++ .../web/activity_pub/mrf/hellthread_policy.ex | 31 ++++++++++++------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/docs/config.md b/docs/config.md index a1fd8e3f4b..ed253e906a 100644 --- a/docs/config.md +++ b/docs/config.md @@ -148,7 +148,7 @@ This section is used to configure Pleroma-FE, unless ``:managed_config`` in ``:i * `allow_direct`: whether to allow direct messages ## :mrf_hellthread -* `delist_threshold`: Number of mentioned users after which the message gets delisted. Set to 0 to disable. +* `delist_threshold`: Number of mentioned users after which the message gets delisted (the message can still be seen, but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable. * `reject_threshold`: Number of mentioned users after which the messaged gets rejected. Set to 0 to disable. ## :media_proxy diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index dc50682eed..0eb1833aab 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -12,6 +12,13 @@ def check_frontend_config_mechanism() do You are using the old configuration mechanism for the frontend. Please check config.md. """) end + + if Pleroma.Config.get(:mrf_hellthread, :threshold) do + Logger.warn(""" + !!!DEPRECATION WARNING!!! + You are using the old configuration mechanism for the hellthread filter. Please check config.md. + """) + end end def warn do diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index d95424493e..cd9f9b1c4d 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -6,27 +6,34 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do alias Pleroma.User @behaviour Pleroma.Web.ActivityPub.MRF + defp delist_message(object) do + follower_collection = User.get_by_ap_id(object["actor"].follower_address) + + object + |> Kernel.update_in(["to"], [follower_collection]) + |> Kernel.update_in(["cc"], ["https://www.w3.org/ns/activitystreams#Public"]) + end + @impl true def filter(%{"type" => "Create"} = object) do delist_threshold = Pleroma.Config.get([:mrf_hellthread, :delist_threshold]) - reject_threshold = Pleroma.Config.get([:mrf_hellthread, :reject_threshold]) + + reject_threshold = + Pleroma.Config.get( + [:mrf_hellthread, :reject_threshold], + Pleroma.Config.get([:mrf_hellthread, :threshold]) + ) + recipients = (object["to"] || []) ++ (object["cc"] || []) cond do - length(recipients) > reject_threshold and reject_threshold != 0 -> + length(recipients) > reject_threshold and reject_threshold > 0 -> {:reject, nil} - length(recipients) > delist_threshold and delist_threshold != 0 -> + length(recipients) > delist_threshold and delist_threshold > 0 -> 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 - follower_collection = User.get_by_ap_id(object["actor"].follower_address) - - object - |> Kernel.update_in(["object", "to"], [follower_collection]) - |> Kernel.update_in(["object", "cc"], ["https://www.w3.org/ns/activitystreams#Public"]) - |> Kernel.update_in(["to"], [follower_collection]) - |> Kernel.update_in(["cc"], ["https://www.w3.org/ns/activitystreams#Public"]) - + Enum.member?(object["to"], "https://www.w3.org/ns/activitystreams#Public") do + delist_message(object) {:ok, object} else {:ok, object}