refactor(activitypub): handle failure finding public key in actor keys

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2023-12-06 08:25:02 +01:00
parent 3a55baeffd
commit 5b337f952a
2 changed files with 36 additions and 19 deletions

View File

@@ -680,19 +680,22 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
@doc """
Converts PEM encoded keys to a public key representation
"""
@spec pem_to_public_key_pem(String.t()) :: String.t()
@spec pem_to_public_key_pem(String.t()) :: String.t() | {:error, :no_publickey_found}
def pem_to_public_key_pem(pem) do
public_key = pem_to_public_key(pem)
public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key)
:public_key.pem_encode([public_key])
case :public_key.pem_decode(pem) do
[key_code] ->
public_key = pem_to_public_key(key_code)
public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key)
:public_key.pem_encode([public_key])
_ ->
{:error, :no_publickey_found}
end
end
@spec pem_to_public_key(String.t()) :: {:RSAPublicKey, any(), any()}
defp pem_to_public_key(pem) do
[key_code] = :public_key.pem_decode(pem)
key = :public_key.pem_entry_decode(key_code)
case key do
defp pem_to_public_key(key_code) do
case :public_key.pem_entry_decode(key_code) do
{:RSAPrivateKey, _, modulus, exponent, _, _, _, _, _, _, _} ->
{:RSAPublicKey, modulus, exponent}