Add check on activity visibility in sub notification

This commit is contained in:
Sadposter 2019-04-07 15:11:29 +01:00
parent e6778003ab
commit 76fdfd1c7f
2 changed files with 15 additions and 1 deletions

View File

@ -12,6 +12,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do
alias Pleroma.Repo alias Pleroma.Repo
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.Endpoint alias Pleroma.Web.Endpoint
alias Pleroma.Web.MediaProxy alias Pleroma.Web.MediaProxy
@ -337,13 +338,14 @@ def maybe_notify_mentioned_recipients(recipients, _), do: recipients
def maybe_notify_subscribers( def maybe_notify_subscribers(
recipients, recipients,
%Activity{data: %{"actor" => actor, "type" => type}} %Activity{data: %{"actor" => actor, "type" => type}} = activity
) )
when type == "Create" do when type == "Create" do
with %User{} = user <- User.get_by_ap_id(actor) do with %User{} = user <- User.get_by_ap_id(actor) do
subscriber_ids = subscriber_ids =
user user
|> User.subscribers() |> User.subscribers()
|> Enum.filter(&Visibility.visible_for_user?(activity, &1))
|> Enum.map(& &1.ap_id) |> Enum.map(& &1.ap_id)
recipients ++ subscriber_ids recipients ++ subscriber_ids

View File

@ -106,6 +106,18 @@ test "it doesn't create duplicate notifications for follow+subscribed users" do
{:ok, status} = TwitterAPI.create_status(user, %{"status" => "Akariiiin"}) {:ok, status} = TwitterAPI.create_status(user, %{"status" => "Akariiiin"})
{:ok, [_notif]} = Notification.create_notifications(status) {:ok, [_notif]} = Notification.create_notifications(status)
end end
test "it doesn't create subscription notifications if the recipient cannot see the status" do
user = insert(:user)
subscriber = insert(:user)
User.subscribe(subscriber, user)
{:ok, status} =
TwitterAPI.create_status(user, %{"status" => "inwisible", "visibility" => "direct"})
assert {:ok, []} == Notification.create_notifications(status)
end
end end
describe "get notification" do describe "get notification" do