Streamer: Don't send out stream events for blocked users.
This commit is contained in:
parent
96add86b50
commit
9810153aeb
2 changed files with 82 additions and 13 deletions
|
@ -110,6 +110,11 @@ defmodule Pleroma.Web.Streamer do
|
||||||
|
|
||||||
def push_to_socket(topics, topic, item) do
|
def push_to_socket(topics, topic, item) do
|
||||||
Enum.each(topics[topic] || [], fn socket ->
|
Enum.each(topics[topic] || [], fn socket ->
|
||||||
|
# Get the current user so we have up-to-date blocks etc.
|
||||||
|
user = User.get_cached_by_ap_id(socket.assigns[:user].ap_id)
|
||||||
|
blocks = user.info["blocks"] || []
|
||||||
|
|
||||||
|
unless item.actor in blocks do
|
||||||
json =
|
json =
|
||||||
%{
|
%{
|
||||||
event: "update",
|
event: "update",
|
||||||
|
@ -117,13 +122,14 @@ defmodule Pleroma.Web.Streamer do
|
||||||
Pleroma.Web.MastodonAPI.StatusView.render(
|
Pleroma.Web.MastodonAPI.StatusView.render(
|
||||||
"status.json",
|
"status.json",
|
||||||
activity: item,
|
activity: item,
|
||||||
for: socket.assigns[:user]
|
for: user
|
||||||
)
|
)
|
||||||
|> Jason.encode!()
|
|> Jason.encode!()
|
||||||
}
|
}
|
||||||
|> Jason.encode!()
|
|> Jason.encode!()
|
||||||
|
|
||||||
send(socket.transport_pid, {:text, json})
|
send(socket.transport_pid, {:text, json})
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
63
test/web/streamer_test.exs
Normal file
63
test/web/streamer_test.exs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
defmodule Pleroma.Web.StreamerTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Web.Streamer
|
||||||
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "it sends to public" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
task =
|
||||||
|
Task.async(fn ->
|
||||||
|
assert_receive {:text, _}, 4_000
|
||||||
|
end)
|
||||||
|
|
||||||
|
fake_socket = %{
|
||||||
|
transport_pid: task.pid,
|
||||||
|
assigns: %{
|
||||||
|
user: user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"})
|
||||||
|
|
||||||
|
topics = %{
|
||||||
|
"public" => [fake_socket]
|
||||||
|
}
|
||||||
|
|
||||||
|
Streamer.push_to_socket(topics, "public", activity)
|
||||||
|
|
||||||
|
Task.await(task)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it doesn't send to blocked users" do
|
||||||
|
user = insert(:user)
|
||||||
|
blocked_user = insert(:user)
|
||||||
|
{:ok, user} = User.block(user, blocked_user)
|
||||||
|
|
||||||
|
task =
|
||||||
|
Task.async(fn ->
|
||||||
|
refute_receive {:text, _}, 1_000
|
||||||
|
end)
|
||||||
|
|
||||||
|
fake_socket = %{
|
||||||
|
transport_pid: task.pid,
|
||||||
|
assigns: %{
|
||||||
|
user: user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"})
|
||||||
|
|
||||||
|
topics = %{
|
||||||
|
"public" => [fake_socket]
|
||||||
|
}
|
||||||
|
|
||||||
|
Streamer.push_to_socket(topics, "public", activity)
|
||||||
|
|
||||||
|
Task.await(task)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue