Merge branch 'authorized-fetch-fix' into 'develop'
Fix fetching public keys with authorized fetch enabled See merge request pleroma/pleroma!4383
This commit is contained in:
commit
68b4de7558
4 changed files with 16 additions and 1 deletions
1
changelog.d/authorized_fetch.fix
Normal file
1
changelog.d/authorized_fetch.fix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Fix fetching public keys with authorized fetch enabled
|
||||||
|
|
@ -54,7 +54,7 @@ defmodule Pleroma.Signature do
|
||||||
|
|
||||||
def fetch_public_key(conn) do
|
def fetch_public_key(conn) do
|
||||||
with {:ok, actor_id} <- get_actor_id(conn),
|
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}
|
{:ok, public_key}
|
||||||
else
|
else
|
||||||
e ->
|
e ->
|
||||||
|
|
|
||||||
|
|
@ -2307,6 +2307,15 @@ defmodule Pleroma.User do
|
||||||
|
|
||||||
def public_key(_), do: {:error, "key not found"}
|
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
|
def get_public_key_for_ap_id(ap_id) do
|
||||||
with %User{} = user <- get_cached_by_ap_id(ap_id),
|
with %User{} = user <- get_cached_by_ap_id(ap_id),
|
||||||
{:ok, public_key} <- public_key(user) do
|
{:ok, public_key} <- public_key(user) do
|
||||||
|
|
|
||||||
|
|
@ -1881,6 +1881,11 @@ defmodule Pleroma.UserTest do
|
||||||
end
|
end
|
||||||
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
|
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")
|
assert :error = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue