Merge remote-tracking branch 'upstream/develop' into neckbeard

This commit is contained in:
Your New SJW Waifu 2024-01-11 14:40:55 -06:00
commit d44fab9ffc
7 changed files with 66 additions and 12 deletions

View File

@ -0,0 +1 @@
When downloading remote emojis packs, account for pagination

View File

@ -0,0 +1 @@
Make remote emoji packs API use specifically the V1 URL. Akkoma does not understand it without V1, and it works either way with normal pleroma, so no reason to not do this

View File

@ -209,7 +209,9 @@ defmodule Pleroma.Emoji.Pack do
with :ok <- validate_shareable_packs_available(uri) do with :ok <- validate_shareable_packs_available(uri) do
uri uri
|> URI.merge("/api/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}") |> URI.merge(
"/api/v1/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}"
)
|> http_get() |> http_get()
end end
end end
@ -249,8 +251,12 @@ defmodule Pleroma.Emoji.Pack do
uri = url |> String.trim() |> URI.parse() uri = url |> String.trim() |> URI.parse()
with :ok <- validate_shareable_packs_available(uri), with :ok <- validate_shareable_packs_available(uri),
{:ok, %{"files_count" => files_count}} <-
uri |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}&page_size=0") |> http_get(),
{:ok, remote_pack} <- {:ok, remote_pack} <-
uri |> URI.merge("/api/pleroma/emoji/pack?name=#{name}") |> http_get(), uri
|> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}&page_size=#{files_count}")
|> http_get(),
{:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name), {:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name),
{:ok, archive} <- download_archive(url, sha), {:ok, archive} <- download_archive(url, sha),
pack <- copy_as(remote_pack, as || name), pack <- copy_as(remote_pack, as || name),
@ -592,7 +598,7 @@ defmodule Pleroma.Emoji.Pack do
{:ok, {:ok,
%{ %{
sha: sha, sha: sha,
url: URI.merge(uri, "/api/pleroma/emoji/packs/archive?name=#{name}") |> to_string() url: URI.merge(uri, "/api/v1/pleroma/emoji/packs/archive?name=#{name}") |> to_string()
}} }}
%{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) -> %{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) ->

View 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)

View File

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

View File

@ -116,7 +116,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} ->
json(%{metadata: %{features: ["shareable_emoji_packs"]}}) json(%{metadata: %{features: ["shareable_emoji_packs"]}})
%{method: :get, url: "https://example.com/api/pleroma/emoji/packs?page=2&page_size=1"} -> %{method: :get, url: "https://example.com/api/v1/pleroma/emoji/packs?page=2&page_size=1"} ->
json(resp) json(resp)
end) end)
@ -199,7 +199,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack&page_size=" <> _n
} -> } ->
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack") |> get("/api/pleroma/emoji/pack?name=test_pack")
@ -208,7 +208,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/packs/archive?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=test_pack"
} -> } ->
conn conn
|> get("/api/pleroma/emoji/packs/archive?name=test_pack") |> get("/api/pleroma/emoji/packs/archive?name=test_pack")
@ -217,7 +217,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack_nonshared" url:
"https://example.com/api/v1/pleroma/emoji/pack?name=test_pack_nonshared&page_size=" <>
_n
} -> } ->
conn conn
|> get("/api/pleroma/emoji/pack?name=test_pack_nonshared") |> get("/api/pleroma/emoji/pack?name=test_pack_nonshared")
@ -305,14 +307,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=pack_bad_sha" url: "https://example.com/api/v1/pleroma/emoji/pack?name=pack_bad_sha&page_size=" <> _n
} -> } ->
{:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha") {:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha")
%Tesla.Env{status: 200, body: Jason.encode!(pack)} %Tesla.Env{status: 200, body: Jason.encode!(pack)}
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/packs/archive?name=pack_bad_sha" url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=pack_bad_sha"
} -> } ->
%Tesla.Env{ %Tesla.Env{
status: 200, status: 200,
@ -342,7 +344,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
%{ %{
method: :get, method: :get,
url: "https://example.com/api/pleroma/emoji/pack?name=test_pack" url: "https://example.com/api/v1/pleroma/emoji/pack?name=test_pack&page_size=" <> _n
} -> } ->
{:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack") {:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack")
%Tesla.Env{status: 200, body: Jason.encode!(pack)} %Tesla.Env{status: 200, body: Jason.encode!(pack)}