Streamer: Don't send out stream events for blocked users.

This commit is contained in:
lain 2018-05-05 13:40:47 +02:00
parent 96add86b50
commit 9810153aeb
2 changed files with 82 additions and 13 deletions

View File

@ -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

View 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