From 1610d39f3645ad664dfde06940ba891082ded752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Tue, 21 Oct 2025 21:41:33 +0200 Subject: [PATCH 1/2] Revert "User.get_or_fetch_public_key_for_ap_id/1 is no longer required." This reverts commit c0a50b7c3e340cd621827922200daa0f29dc6e15. --- lib/pleroma/user.ex | 9 +++++++++ test/pleroma/user_test.exs | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 468e124b5..3d4815aca 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2307,6 +2307,15 @@ defmodule Pleroma.User do def public_key(_), do: {:error, "key not found"} + def get_or_fetch_public_key_for_ap_id(ap_id) do + with {:ok, %User{} = user} <- get_or_fetch_by_ap_id(ap_id), + {:ok, public_key} <- public_key(user) do + {:ok, public_key} + else + _ -> :error + end + end + def get_public_key_for_ap_id(ap_id) do with %User{} = user <- get_cached_by_ap_id(ap_id), {:ok, public_key} <- public_key(user) do diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 0b4dc9197..b2533e9f1 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -1881,6 +1881,11 @@ defmodule Pleroma.UserTest do end end + test "get_or_fetch_public_key_for_ap_id fetches a user that's not in the db" do + assert {:ok, _key} = + User.get_or_fetch_public_key_for_ap_id("http://mastodon.example.org/users/admin") + end + test "get_public_key_for_ap_id returns correctly for user that's not in the db" do assert :error = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin") end From b38fedf342e0392d5cff2b64569f0c24981b57bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Tue, 21 Oct 2025 21:46:03 +0200 Subject: [PATCH 2/2] Fix fetching public keys with authorized fetch enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- changelog.d/authorized_fetch.fix | 1 + lib/pleroma/signature.ex | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog.d/authorized_fetch.fix diff --git a/changelog.d/authorized_fetch.fix b/changelog.d/authorized_fetch.fix new file mode 100644 index 000000000..1db8e88c9 --- /dev/null +++ b/changelog.d/authorized_fetch.fix @@ -0,0 +1 @@ +Fix fetching public keys with authorized fetch enabled \ No newline at end of file diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex index 47d9d46f6..fca61799b 100644 --- a/lib/pleroma/signature.ex +++ b/lib/pleroma/signature.ex @@ -54,7 +54,7 @@ defmodule Pleroma.Signature do def fetch_public_key(conn) do with {:ok, actor_id} <- get_actor_id(conn), - {:ok, public_key} <- User.get_public_key_for_ap_id(actor_id) do + {:ok, public_key} <- User.get_or_fetch_public_key_for_ap_id(actor_id) do {:ok, public_key} else e ->