forked from AkkomaGang/akkoma
Merge branch '1883-mrf-chat' into 'develop'
HellthreadPolicy: Restrict to Notes and Articles. Closes #1883 See merge request pleroma/pleroma!2666
This commit is contained in:
commit
282f492cd5
2 changed files with 22 additions and 3 deletions
|
@ -13,8 +13,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
|
||||||
|
|
||||||
defp delist_message(message, threshold) when threshold > 0 do
|
defp delist_message(message, threshold) when threshold > 0 do
|
||||||
follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address
|
follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address
|
||||||
|
to = message["to"] || []
|
||||||
|
cc = message["cc"] || []
|
||||||
|
|
||||||
follower_collection? = Enum.member?(message["to"] ++ message["cc"], follower_collection)
|
follower_collection? = Enum.member?(to ++ cc, follower_collection)
|
||||||
|
|
||||||
message =
|
message =
|
||||||
case get_recipient_count(message) do
|
case get_recipient_count(message) do
|
||||||
|
@ -71,7 +73,8 @@ defp get_recipient_count(message) do
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def filter(%{"type" => "Create"} = message) do
|
def filter(%{"type" => "Create", "object" => %{"type" => object_type}} = message)
|
||||||
|
when object_type in ~w{Note Article} do
|
||||||
reject_threshold =
|
reject_threshold =
|
||||||
Pleroma.Config.get(
|
Pleroma.Config.get(
|
||||||
[:mrf_hellthread, :reject_threshold],
|
[:mrf_hellthread, :reject_threshold],
|
||||||
|
|
|
@ -8,6 +8,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
|
||||||
|
|
||||||
import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy
|
import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy
|
||||||
|
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
|
@ -20,7 +22,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
|
||||||
"https://instance.tld/users/user1",
|
"https://instance.tld/users/user1",
|
||||||
"https://instance.tld/users/user2",
|
"https://instance.tld/users/user2",
|
||||||
"https://instance.tld/users/user3"
|
"https://instance.tld/users/user3"
|
||||||
]
|
],
|
||||||
|
"object" => %{
|
||||||
|
"type" => "Note"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[user: user, message: message]
|
[user: user, message: message]
|
||||||
|
@ -28,6 +33,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
|
||||||
|
|
||||||
setup do: clear_config(:mrf_hellthread)
|
setup do: clear_config(:mrf_hellthread)
|
||||||
|
|
||||||
|
test "doesn't die on chat messages" do
|
||||||
|
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 2, reject_threshold: 0})
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post_chat_message(user, other_user, "moin")
|
||||||
|
|
||||||
|
assert {:ok, _} = filter(activity.data)
|
||||||
|
end
|
||||||
|
|
||||||
describe "reject" do
|
describe "reject" do
|
||||||
test "rejects the message if the recipient count is above reject_threshold", %{
|
test "rejects the message if the recipient count is above reject_threshold", %{
|
||||||
message: message
|
message: message
|
||||||
|
|
Loading…
Reference in a new issue