aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadposter <hannah+pleroma@coffee-and-dreams.uk>2019-07-24 11:09:06 +0100
committerSadposter <hannah+pleroma@coffee-and-dreams.uk>2019-07-24 11:09:06 +0100
commit4af4f6166bd04b5a302856034fdda94dd61045ed (patch)
tree99d2513418c39e33ea6b13574c51f42a07b48e5f
parent0be548b90aafda0b524e2ad85e7072961c336023 (diff)
downloadpleroma-4af4f6166bd04b5a302856034fdda94dd61045ed.tar.gz
honour domain blocks on streaming notifications
-rw-r--r--lib/pleroma/web/streamer.ex3
-rw-r--r--test/web/streamer_test.exs18
2 files changed, 21 insertions, 0 deletions
diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex
index 86e2dc4dd..d233d2a41 100644
--- a/lib/pleroma/web/streamer.ex
+++ b/lib/pleroma/web/streamer.ex
@@ -234,10 +234,13 @@ defmodule Pleroma.Web.Streamer do
blocks = user.info.blocks || []
mutes = user.info.mutes || []
reblog_mutes = user.info.muted_reblogs || []
+ domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.info.domain_blocks)
+ %{host: host} = URI.parse(parent.data["actor"])
with parent when not is_nil(parent) <- Object.normalize(item),
true <- Enum.all?([blocks, mutes, reblog_mutes], &(item.actor not in &1)),
true <- Enum.all?([blocks, mutes], &(parent.data["actor"] not in &1)),
+ false <- Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, host),
true <- thread_containment(item, user) do
true
else
diff --git a/test/web/streamer_test.exs b/test/web/streamer_test.exs
index 8f56e7486..95d5e5d58 100644
--- a/test/web/streamer_test.exs
+++ b/test/web/streamer_test.exs
@@ -103,6 +103,24 @@ defmodule Pleroma.Web.StreamerTest do
Streamer.stream("user:notification", notif)
Task.await(task)
end
+
+ test "it doesn't send notify to the 'user:notification' stream' when a domain is blocked", %{
+ user: user
+ } do
+ user2 = insert(:user, %{ap_id: "https://hecking-lewd-place.com/user/meanie"})
+ task = Task.async(fn -> refute_receive {:text, _}, 4_000 end)
+
+ Streamer.add_socket(
+ "user:notification",
+ %{transport_pid: task.pid, assigns: %{user: user}}
+ )
+
+ {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"})
+ {:ok, user} = User.block_domain(user, "hecking-lewd-place.com")
+ {:ok, notif, _} = CommonAPI.favorite(activity.id, user2)
+ Streamer.stream("user:notification", notif)
+ Task.await(task)
+ end
end
test "it sends to public" do