honour domain blocks on streaming notifications
authorSadposter <hannah+pleroma@coffee-and-dreams.uk>
Wed, 24 Jul 2019 10:09:06 +0000 (11:09 +0100)
committerSadposter <hannah+pleroma@coffee-and-dreams.uk>
Wed, 24 Jul 2019 10:09:06 +0000 (11:09 +0100)
lib/pleroma/web/streamer.ex
test/web/streamer_test.exs

index 86e2dc4ddc8e3d8c4deb1b5c67cbe8972a98689a..d233d2a417e8c6ab2ba4781c7e1aecabfe9316fa 100644 (file)
@@ -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
index 8f56e7486e48ac2ea20a8cf7d688e77f1a72bb9a..95d5e5d58f6aaefd01de25e99759c8a816a0fee9 100644 (file)
@@ -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