defmodule PrimaAuth0Ex do
@moduledoc """
Handles the retrieval of token from Auth0 and their verification/validation.
"""
alias PrimaAuth0Ex.{Token, TokenProvider}
@doc """
Obtain a token for the given audience.
"""
@spec token_for(String.t()) :: {:ok, String.t()} | {:error, any()}
def token_for(audience) do
TokenProvider.token_for(TokenProvider, audience)
end
@doc """
Force the refresh of the token for a given audience, invalidating both the local and the shared cache.
"""
@spec refresh_token_for(String.t()) :: {:ok, String.t()} | {:error, any()}
def refresh_token_for(audience) do
TokenProvider.refresh_token_for(TokenProvider, audience)
end
@doc """
Verify the integrity of a token, and validate its claims.
It is possible to set a list of permissions to validate.
Only tokens that include all the required permissions will pass validation.
When `ignore_signature` is `true`, only checks the validity of claims of the token and not its signature.
This option should never be enabled in production-like environments, as it allows anyone to forge valid tokens.
"""
@spec verify_and_validate(String.t(), String.t()) :: {:ok, Joken.claims()} | {:error, atom | Keyword.t()}
@spec verify_and_validate(String.t(), String.t(), list(String.t())) ::
{:ok, Joken.claims()} | {:error, atom | Keyword.t()}
@spec verify_and_validate(String.t(), String.t(), list(String.t()), boolean()) ::
{:ok, Joken.claims()} | {:error, atom | Keyword.t()}
def verify_and_validate(token, audience, permissions \\ [], ignore_signature \\ false) do
Token.verify_and_validate_token(token, audience, permissions, ignore_signature)
end
end