Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
index 95211c596..1fd7b9c67 100644
--- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
+++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
@@ -1,77 +1,82 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
alias Pleroma.User
@behaviour Pleroma.Web.ActivityPub.MRF
defp delist_message(message) do
delist_threshold = Pleroma.Config.get([:mrf_hellthread, :delist_threshold])
follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address
+ follower_collection? = Enum.member?(message["to"] ++ message["cc"], follower_collection)
+
message =
- with {:public, recipients} <- get_recipient_count(message) do
- if recipients > delist_threshold and delist_threshold > 0 do
+ case recipients = get_recipient_count(message) do
+ {:public, _} when follower_collection? and recipients > delist_threshold ->
message
|> Map.put("to", [follower_collection])
|> Map.put("cc", ["https://www.w3.org/ns/activitystreams#Public"])
- else
+
+ {:public, _} when recipients > delist_threshold ->
+ message
+ |> Map.put("to", [])
+ |> Map.put("cc", ["https://www.w3.org/ns/activitystreams#Public"])
+
+ _ ->
message
- end
- else
- _ -> message
end
{:ok, message}
end
defp reject_message(message) do
reject_threshold =
Pleroma.Config.get(
[:mrf_hellthread, :reject_threshold],
Pleroma.Config.get([:mrf_hellthread, :threshold])
)
with {_, recipients} <- get_recipient_count(message) do
if recipients > reject_threshold and reject_threshold > 0 do
{:reject, nil}
else
{:ok, message}
end
end
end
defp get_recipient_count(message) do
recipients = (message["to"] || []) ++ (message["cc"] || [])
follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address
if Enum.member?(recipients, "https://www.w3.org/ns/activitystreams#Public") do
recipients =
recipients
|> List.delete("https://www.w3.org/ns/activitystreams#Public")
|> List.delete(follower_collection)
{:public, length(recipients)}
else
recipients =
recipients
|> List.delete(follower_collection)
{:not_public, length(recipients)}
end
end
@impl true
def filter(%{"type" => "Create"} = message) do
with {:ok, message} <- reject_message(message),
{:ok, message} <- delist_message(message) do
{:ok, message}
else
_e -> {:reject, nil}
end
end
@impl true
def filter(message), do: {:ok, message}
end
diff --git a/test/web/activity_pub/mrf/hellthread_policy_test.exs b/test/web/activity_pub/mrf/hellthread_policy_test.exs
index b5bdd35cc..ebf9997cd 100644
--- a/test/web/activity_pub/mrf/hellthread_policy_test.exs
+++ b/test/web/activity_pub/mrf/hellthread_policy_test.exs
@@ -1,50 +1,50 @@
# Pleroma: A lightweight social networking server
# Copyright © 2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
use Pleroma.DataCase
import Pleroma.Factory
import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy
describe "hellthread filter tests" do
setup do
user = insert(:user)
message = %{
"actor" => user.ap_id,
"cc" => [user.follower_address],
"type" => "Create",
"to" => [
"https://www.w3.org/ns/activitystreams#Public",
"https://instace.tld/users/user1",
"https://instace.tld/users/user2",
"https://instace.tld/users/user3"
]
}
[user: user, message: message]
end
test "reject test", %{message: message} do
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 2})
{:reject, nil} = filter(message)
end
test "delist test", %{user: user, message: message} do
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 2, reject_threshold: 0})
{:ok, message} = filter(message)
assert user.follower_address in message["to"]
assert "https://www.w3.org/ns/activitystreams#Public" in message["cc"]
end
- test "threshold test", %{message: message} do
+ test "excludes follower collection and public URI from threshold count", %{message: message} do
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 3})
{:ok, _} = filter(message)
end
end
end

File Metadata

Mime Type
text/x-diff
Expires
Sun, Nov 1, 10:17 PM (11 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1803381
Default Alt Text
(4 KB)

Event Timeline