Skip to content
Snippets Groups Projects
Commit 4af4f616 authored by Sadposter's avatar Sadposter
Browse files

honour domain blocks on streaming notifications

parent 0be548b9
No related branches found
No related tags found
No related merge requests found
......@@ -234,10 +234,13 @@ defp should_send?(%User{} = user, %Activity{} = item) 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
......
......@@ -103,6 +103,24 @@ test "it doesn't send notify to the 'user:notification' stream when a thread is
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment