Current section
Files
Jump to
Current section
Files
lib/source/google_key_source.ex
defmodule ExFirebaseAuth.KeySource.Google do
@moduledoc false
@endpoint_url "https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com"
@behaviour ExFirebaseAuth.KeySource
def fetch_certificates do
with {:ok, %Finch.Response{body: body}} <-
Finch.build(:get, @endpoint_url) |> Finch.request(ExFirebaseAuthFinch),
{:ok, json_data} <- Jason.decode(body) do
{:ok, convert_to_jose_keys(json_data)}
else
_ ->
:error
end
end
defp convert_to_jose_keys(json_data) do
json_data
|> Enum.map(fn {key, value} ->
case JOSE.JWK.from_pem(value) do
[] -> {key, nil}
jwk -> {key, jwk}
end
end)
|> Enum.filter(fn {_, value} -> not is_nil(value) end)
end
end