implemented tweaks

This commit is contained in:
Karen Konou 2019-02-03 22:46:06 +01:00
parent 531507a635
commit e10cda7541
3 changed files with 27 additions and 13 deletions

View File

@ -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

View File

@ -12,6 +12,13 @@ defmodule Pleroma.Config.DeprecationWarnings 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

View File

@ -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}