summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortusooa <tusooa@kazv.moe>2023-11-07 21:16:24 -0500
committertusooa <tusooa@kazv.moe>2023-12-27 12:28:10 -0500
commite34a975dd946cc609638d85c20a57e2bfed6ebc7 (patch)
tree981f1d1e4f5595fc681386c7a7fcee73d89ca0b0
parent5f5533b88a66bdd3547eb5e29f29191093457052 (diff)
downloadpleroma-e34a975dd946cc609638d85c20a57e2bfed6ebc7.tar.gz
pleroma-e34a975dd946cc609638d85c20a57e2bfed6ebc7.zip
Do not boost if group is blocking poster
-rw-r--r--lib/pleroma/web/activity_pub/utils.ex8
-rw-r--r--test/pleroma/web/activity_pub/side_effects_test.exs19
-rw-r--r--test/pleroma/web/common_api_test.exs8
3 files changed, 34 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index e4edbd5ee..e2fc2640d 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -937,13 +937,19 @@ defmodule Pleroma.Web.ActivityPub.Utils do
end
def maybe_handle_group_posts(activity) do
+ poster = User.get_cached_by_ap_id(activity.actor)
+
mentions =
activity.data["to"]
|> Enum.filter(&(&1 != activity.actor))
mentioned_local_groups =
User.get_all_by_ap_id(mentions)
- |> Enum.filter(&(&1.actor_type == "Group" and &1.local))
+ |> Enum.filter(fn user ->
+ user.actor_type == "Group" and
+ user.local and
+ not User.blocks?(user, poster)
+ end)
mentioned_local_groups
|> Enum.each(fn group ->
diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs
index 2b1d414b9..94cc80b76 100644
--- a/test/pleroma/web/activity_pub/side_effects_test.exs
+++ b/test/pleroma/web/activity_pub/side_effects_test.exs
@@ -984,5 +984,24 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
assert [announce] = get_announces_of_object(object)
assert announce.actor == group.ap_id
end
+
+ test "group should not boost it if group is blocking poster", %{
+ make_create: make_create,
+ group: group,
+ poster: poster
+ } do
+ {:ok, _} = CommonAPI.block(group, poster)
+ create_activity_data = make_create.([group])
+ {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false)
+
+ {:ok, _create_activity, _meta} =
+ SideEffects.handle(create_activity,
+ local: false,
+ object_data: create_activity_data["object"]
+ )
+
+ object = Object.normalize(create_activity, fetch: false)
+ assert [] = get_announces_of_object(object)
+ end
end
end
diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs
index 275a633c2..f002172c5 100644
--- a/test/pleroma/web/common_api_test.exs
+++ b/test/pleroma/web/common_api_test.exs
@@ -1883,5 +1883,13 @@ defmodule Pleroma.Web.CommonAPITest do
announces = get_announces_of_object(post.object)
assert [_, _] = announces
end
+
+ test "it does not boost if group is blocking poster", %{poster: poster, group: group} do
+ {:ok, _} = CommonAPI.block(group, poster)
+ {:ok, post} = CommonAPI.post(poster, %{status: "hey @#{group.nickname}"})
+
+ announces = get_announces_of_object(post.object)
+ assert [] = announces
+ end
end
end