Przeglądaj źródła

streamer: use direct object for filter checks when there is no valid child object in an activity

We call Object.normalize/1 to get the child object for situations like Announce.
However, the check is flawed and immediately fails if Object.normalize/1 fails.
Instead, we should use the activity itself in those cases to allow activities which
never have a child object to pass through the filter.

Closes #1291
tags/v1.1.4^2
Ariadne Conill lain 4 lat temu
rodzic
commit
6a151e7c7f
2 zmienionych plików z 19 dodań i 1 usunięć
  1. +1
    -1
      lib/pleroma/web/streamer/worker.ex
  2. +18
    -0
      test/web/streamer/streamer_test.exs

+ 1
- 1
lib/pleroma/web/streamer/worker.ex Wyświetl plik

@@ -136,7 +136,7 @@ defmodule Pleroma.Web.Streamer.Worker do
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),
with parent <- Object.normalize(item) || 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),


+ 18
- 0
test/web/streamer/streamer_test.exs Wyświetl plik

@@ -110,6 +110,24 @@ defmodule Pleroma.Web.StreamerTest do
Streamer.stream("user:notification", notif)
Task.await(task)
end

test "it sends follow activities to the 'user:notification' stream", %{
user: user
} do
user2 = insert(:user)
task = Task.async(fn -> assert_receive {:text, _}, 4_000 end)

Streamer.add_socket(
"user:notification",
%{transport_pid: task.pid, assigns: %{user: user}}
)

{:ok, _follower, _followed, _activity} = CommonAPI.follow(user2, user)

# We don't directly pipe the notification to the streamer as it's already
# generated as a side effect of CommonAPI.follow().
Task.await(task)
end
end

test "it sends to public" do


Ładowanie…
Anuluj
Zapisz