aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Tinio <aptinio@gmail.com>2019-05-15 07:59:24 +0800
committerAaron Tinio <aptinio@gmail.com>2019-05-16 05:53:51 +0800
commit2b6119dfbf47f118dfb102fc09f6450e59ccf15e (patch)
treef97ef60544b4726908f63839364462a806297ee4
parent64495b96e9159b88ef0b4a6486e60b54722664fb (diff)
downloadpleroma-2b6119dfbf47f118dfb102fc09f6450e59ccf15e.tar.gz
Restrict reblogs of activities from blocked domains
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex11
-rw-r--r--test/web/activity_pub/activity_pub_test.exs9
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 233fee4fa..6087a1cdc 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -752,6 +752,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
from(
activity in query,
+ inner_join: o in Object,
+ on:
+ fragment(
+ "(?->>'id') = COALESCE(?->'object'->>'id', ?->>'object')",
+ o.data,
+ activity.data,
+ activity.data
+ ),
where: fragment("not (? = ANY(?))", activity.actor, ^blocks),
where: fragment("not (? && ?)", activity.recipients, ^blocks),
where:
@@ -761,7 +769,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
activity.data,
^blocks
),
- where: fragment("not (split_part(?, '/', 3) = ANY(?))", activity.actor, ^domain_blocks)
+ where: fragment("not (split_part(?, '/', 3) = ANY(?))", activity.actor, ^domain_blocks),
+ where: fragment("not (split_part(?->>'actor', '/', 3) = ANY(?))", o.data, ^domain_blocks)
)
end
diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs
index 442120ffd..dfee93f67 100644
--- a/test/web/activity_pub/activity_pub_test.exs
+++ b/test/web/activity_pub/activity_pub_test.exs
@@ -474,6 +474,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true})
refute activity in activities
+
+ followed_user = insert(:user)
+ ActivityPub.follow(user, followed_user)
+ {:ok, repeat_activity, _} = CommonAPI.repeat(activity.id, followed_user)
+
+ activities =
+ ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true})
+
+ refute repeat_activity in activities
end
test "doesn't return muted activities" do