forked from AkkomaGang/akkoma
Streamer: Don't send unwanted DMs to list streams
This commit is contained in:
parent
41ff86ca1d
commit
87098d1676
2 changed files with 110 additions and 2 deletions
|
@ -73,7 +73,8 @@ def handle_cast(%{action: :stream, topic: "list", item: item}, topics) do
|
||||||
Pleroma.List.get_lists_from_activity(item)
|
Pleroma.List.get_lists_from_activity(item)
|
||||||
|> Enum.filter(fn list ->
|
|> Enum.filter(fn list ->
|
||||||
owner = Repo.get(User, list.user_id)
|
owner = Repo.get(User, list.user_id)
|
||||||
author.follower_address in owner.following
|
|
||||||
|
ActivityPub.visible_for_user?(item, owner)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ defmodule Pleroma.Web.StreamerTest do
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
|
|
||||||
alias Pleroma.Web.Streamer
|
alias Pleroma.Web.Streamer
|
||||||
alias Pleroma.User
|
alias Pleroma.{List, User}
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
@ -60,4 +60,111 @@ test "it doesn't send to blocked users" do
|
||||||
|
|
||||||
Task.await(task)
|
Task.await(task)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it doesn't send unwanted DMs to list" do
|
||||||
|
user_a = insert(:user)
|
||||||
|
user_b = insert(:user)
|
||||||
|
user_c = insert(:user)
|
||||||
|
|
||||||
|
{:ok, user_a} = User.follow(user_a, user_b)
|
||||||
|
|
||||||
|
{:ok, list} = List.create("Test", user_a)
|
||||||
|
{:ok, list} = List.follow(list, user_b)
|
||||||
|
|
||||||
|
task =
|
||||||
|
Task.async(fn ->
|
||||||
|
refute_receive {:text, _}, 1_000
|
||||||
|
end)
|
||||||
|
|
||||||
|
fake_socket = %{
|
||||||
|
transport_pid: task.pid,
|
||||||
|
assigns: %{
|
||||||
|
user: user_a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.post(user_b, %{
|
||||||
|
"status" => "@#{user_c.nickname} Test",
|
||||||
|
"visibility" => "direct"
|
||||||
|
})
|
||||||
|
|
||||||
|
topics = %{
|
||||||
|
"list:#{list.id}" => [fake_socket]
|
||||||
|
}
|
||||||
|
|
||||||
|
Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
|
||||||
|
|
||||||
|
Task.await(task)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it doesn't send unwanted private posts to list" do
|
||||||
|
user_a = insert(:user)
|
||||||
|
user_b = insert(:user)
|
||||||
|
|
||||||
|
{:ok, list} = List.create("Test", user_a)
|
||||||
|
{:ok, list} = List.follow(list, user_b)
|
||||||
|
|
||||||
|
task =
|
||||||
|
Task.async(fn ->
|
||||||
|
refute_receive {:text, _}, 1_000
|
||||||
|
end)
|
||||||
|
|
||||||
|
fake_socket = %{
|
||||||
|
transport_pid: task.pid,
|
||||||
|
assigns: %{
|
||||||
|
user: user_a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.post(user_b, %{
|
||||||
|
"status" => "Test",
|
||||||
|
"visibility" => "private"
|
||||||
|
})
|
||||||
|
|
||||||
|
topics = %{
|
||||||
|
"list:#{list.id}" => [fake_socket]
|
||||||
|
}
|
||||||
|
|
||||||
|
Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
|
||||||
|
|
||||||
|
Task.await(task)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it send wanted private posts to list" do
|
||||||
|
user_a = insert(:user)
|
||||||
|
user_b = insert(:user)
|
||||||
|
|
||||||
|
{:ok, user_a} = User.follow(user_a, user_b)
|
||||||
|
|
||||||
|
{:ok, list} = List.create("Test", user_a)
|
||||||
|
{:ok, list} = List.follow(list, user_b)
|
||||||
|
|
||||||
|
task =
|
||||||
|
Task.async(fn ->
|
||||||
|
assert_receive {:text, _}, 1_000
|
||||||
|
end)
|
||||||
|
|
||||||
|
fake_socket = %{
|
||||||
|
transport_pid: task.pid,
|
||||||
|
assigns: %{
|
||||||
|
user: user_a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.post(user_b, %{
|
||||||
|
"status" => "Test",
|
||||||
|
"visibility" => "private"
|
||||||
|
})
|
||||||
|
|
||||||
|
topics = %{
|
||||||
|
"list:#{list.id}" => [fake_socket]
|
||||||
|
}
|
||||||
|
|
||||||
|
Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
|
||||||
|
|
||||||
|
Task.await(task)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue