mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2025-01-11 01:35:24 +00:00
Merge branch 'fix-duplicate-inbox-deliveries' into 'develop'
Fix duplicate inbox deliveries See merge request pleroma/pleroma!4031
This commit is contained in:
commit
d4b889783c
3 changed files with 46 additions and 2 deletions
0
changelog.d/fix-duplicate-inbox-deliveries.fix
Normal file
0
changelog.d/fix-duplicate-inbox-deliveries.fix
Normal file
|
@ -255,7 +255,10 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
[priority_recipients, recipients]
|
[priority_recipients, recipients]
|
||||||
|> Enum.map(fn recipients ->
|
|> Enum.map(fn recipients ->
|
||||||
recipients
|
recipients
|
||||||
|> Enum.map(fn actor -> actor.inbox end)
|
|> Enum.map(fn %User{} = user ->
|
||||||
|
determine_inbox(activity, user)
|
||||||
|
end)
|
||||||
|
|> Enum.uniq()
|
||||||
|> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
|
|> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
|
||||||
|> Instances.filter_reachable()
|
|> Instances.filter_reachable()
|
||||||
end)
|
end)
|
||||||
|
@ -302,7 +305,10 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
recipients(actor, activity)
|
recipients(actor, activity)
|
||||||
|> Enum.map(fn recipients ->
|
|> Enum.map(fn recipients ->
|
||||||
recipients
|
recipients
|
||||||
|> Enum.map(fn actor -> actor.inbox end)
|
|> Enum.map(fn %User{} = user ->
|
||||||
|
determine_inbox(activity, user)
|
||||||
|
end)
|
||||||
|
|> Enum.uniq()
|
||||||
|> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
|
|> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,44 @@ defmodule Pleroma.Web.FederatorTest do
|
||||||
%{activity: activity, relay_mock: relay_mock}
|
%{activity: activity, relay_mock: relay_mock}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "to shared inbox when multiple actors from same instance are recipients" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
shared_inbox = "https://domain.com/inbox"
|
||||||
|
|
||||||
|
follower_one =
|
||||||
|
insert(:user, %{
|
||||||
|
local: false,
|
||||||
|
nickname: "nick1@domain.com",
|
||||||
|
ap_id: "https://domain.com/users/nick1",
|
||||||
|
inbox: "https://domain.com/users/nick1/inbox",
|
||||||
|
shared_inbox: shared_inbox
|
||||||
|
})
|
||||||
|
|
||||||
|
follower_two =
|
||||||
|
insert(:user, %{
|
||||||
|
local: false,
|
||||||
|
nickname: "nick2@domain.com",
|
||||||
|
ap_id: "https://domain.com/users/nick2",
|
||||||
|
inbox: "https://domain.com/users/nick2/inbox",
|
||||||
|
shared_inbox: shared_inbox
|
||||||
|
})
|
||||||
|
|
||||||
|
{:ok, _, _} = Pleroma.User.follow(follower_one, user)
|
||||||
|
{:ok, _, _} = Pleroma.User.follow(follower_two, user)
|
||||||
|
|
||||||
|
{:ok, _activity} = CommonAPI.post(user, %{status: "Happy Friday everyone!"})
|
||||||
|
|
||||||
|
ObanHelpers.perform(all_enqueued(worker: PublisherWorker))
|
||||||
|
|
||||||
|
inboxes =
|
||||||
|
all_enqueued(worker: PublisherWorker)
|
||||||
|
|> Enum.filter(&(get_in(&1, [Access.key(:args), Access.key("op")]) == "publish_one"))
|
||||||
|
|> Enum.map(&get_in(&1, [Access.key(:args), Access.key("params"), Access.key("inbox")]))
|
||||||
|
|
||||||
|
assert [shared_inbox] == inboxes
|
||||||
|
end
|
||||||
|
|
||||||
test "with relays active, it publishes to the relay", %{
|
test "with relays active, it publishes to the relay", %{
|
||||||
activity: activity,
|
activity: activity,
|
||||||
relay_mock: relay_mock
|
relay_mock: relay_mock
|
||||||
|
|
Loading…
Reference in a new issue