streamer: worker: check for lack of intersectionality between a user's blocklist...
authorAriadne Conill <ariadne@dereferenced.org>
Fri, 4 Oct 2019 15:41:55 +0000 (15:41 +0000)
committerAriadne Conill <ariadne@dereferenced.org>
Fri, 4 Oct 2019 16:06:14 +0000 (16:06 +0000)
lib/pleroma/web/streamer/worker.ex

index bbb7483e5e87d9262a63b89444f9170b7073f788..3d2c8f473d483f98219d9742a12d0126e663e281 100644 (file)
@@ -132,11 +132,14 @@ defmodule Pleroma.Web.Streamer.Worker do
     blocks = user.info.blocks || []
     mutes = user.info.mutes || []
     reblog_mutes = user.info.muted_reblogs || []
+    recipient_blocks = MapSet.new(blocks ++ mutes)
+    recipients = MapSet.new(item.recipients)
     domain_blocks = Pleroma.Web.ActivityPub.MRF.subdomains_regex(user.info.domain_blocks)
 
     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)),
+         true <- MapSet.disjoint?(recipients, recipient_blocks),
          %{host: item_host} <- URI.parse(item.actor),
          %{host: parent_host} <- URI.parse(parent.data["actor"]),
          false <- Pleroma.Web.ActivityPub.MRF.subdomain_match?(domain_blocks, item_host),