Current section

Files

Jump to
fusion_jwt_authentication lib FusionJWTAuthentication API jwt.ex
Raw

lib/FusionJWTAuthentication/API/jwt.ex

defmodule FusionJWTAuthentication.API.JWT do
@moduledoc """
Handles api request to FusionAuth jwt endpoints
"""
alias HTTPoison.{Error, Response}
@typedoc """
A hex-encoded UUID string.
"""
@type uuid :: <<_::288>>
@spec public_key(uuid) :: nil | String.t()
def public_key(client_id) do
case request_public_key(client_id) do
{:ok, {_, %{"publicKey" => key}}} -> key
_ -> nil
end
end
defp request_public_key(client_id) do
base_url() <> "/api/jwt/public-key?applicationId=#{client_id}"
|> http_client().get()
|> handle_response()
end
defp base_url do
Application.get_env(:fusion_jwt_authentication, :base_url)
end
defp http_client do
Application.get_env(:fusion_jwt_authentication, :http_client)
end
@spec handle_response({:ok, Response.t()} | {:error, Error.t()}) ::
{:ok, {non_neg_integer, map}} | {:error, Response.t() | non_neg_integer}
defp handle_response(resp) do
case resp do
{:ok, %Response{status_code: status_code, body: results}} when status_code < 300 ->
with string when is_binary(results) <- results,
{:ok, result_map} <- Jason.decode(string) do
{:ok, {status_code, result_map}}
else
_ -> {:ok, {status_code, results}}
end
{:ok, %Response{} = response} ->
{:error, response}
error ->
{:error, error}
end
end
end