signing_key: cleanup code

In particular this avoids an unecessary roundtrip
over user_id when searching a key via its primary key_id
This commit is contained in:
Oneric 2025-01-11 21:25:00 +01:00
parent 70fe99d196
commit cc5c1bb10c

View file

@ -174,12 +174,12 @@ def private_key(%User{} = user) do
Will either return the key if it exists locally, or fetch it from the remote instance. Will either return the key if it exists locally, or fetch it from the remote instance.
""" """
def get_or_fetch_by_key_id(key_id) do def get_or_fetch_by_key_id(key_id) do
case key_id_to_user_id(key_id) do case Repo.get_by(__MODULE__, key_id: key_id) do
nil -> nil ->
fetch_remote_key(key_id) fetch_remote_key(key_id)
user_id -> key ->
{:ok, Repo.get_by(__MODULE__, user_id: user_id)} {:ok, key}
end end
end end
@ -195,12 +195,11 @@ def get_or_fetch_by_key_id(key_id) do
def fetch_remote_key(key_id) do def fetch_remote_key(key_id) do
Logger.debug("Fetching remote key: #{key_id}") Logger.debug("Fetching remote key: #{key_id}")
with {:ok, _body} = resp <- with {:ok, resp_body} <-
Pleroma.Object.Fetcher.fetch_and_contain_remote_key(key_id), Pleroma.Object.Fetcher.fetch_and_contain_remote_key(key_id),
{:ok, ap_id, public_key_pem} <- handle_signature_response(resp) do {:ok, ap_id, public_key_pem} <- handle_signature_response(resp_body),
{:ok, user} <- User.get_or_fetch_by_ap_id(ap_id) do
Logger.debug("Fetched remote key: #{ap_id}") Logger.debug("Fetched remote key: #{ap_id}")
# fetch the user
{:ok, user} = User.get_or_fetch_by_ap_id(ap_id)
# store the key # store the key
key = %__MODULE__{ key = %__MODULE__{
user_id: user.id, user_id: user.id,
@ -227,7 +226,7 @@ defp extract_key_details(%{"id" => ap_id, "publicKey" => public_key}) do
end end
end end
defp handle_signature_response({:ok, body}) do defp handle_signature_response(body) do
case body do case body do
%{ %{
"type" => "CryptographicKey", "type" => "CryptographicKey",
@ -247,9 +246,9 @@ defp handle_signature_response({:ok, body}) do
%{"error" => error} -> %{"error" => error} ->
{:error, error} {:error, error}
other ->
{:error, "Could not process key: #{inspect(other)}"}
end end
end end
defp handle_signature_response({:error, e}), do: {:error, e}
defp handle_signature_response(other), do: {:error, "Could not fetch key: #{inspect(other)}"}
end end