lib/token.ex

defmodule Auth0Jwks.Token do
  use Joken.Config, default_signer: nil

  add_hook(JokenJwks, strategy: Auth0Jwks.Strategy)

  @impl true
  def token_config do
    default_claims(skip: [:aud, :iss])
    # todo create util
    |> add_claim("iss", nil, &issued_by_auth0_domain?/1)
    |> add_claim("aud", nil, &has_auth0_custom_api_audience?/1)
  end

  def issued_by_auth0_domain?(iss), do: iss == Auth0Jwks.Config.iss()
  def has_auth0_custom_api_audience?(aud), do: validate_audience(aud, Auth0Jwks.Config.aud())

  defp validate_audience(value, audience) when is_list(value),
    do: Enum.any?(value, &(&1 == audience))

  defp validate_audience(value, audience), do: validate_audience([value], audience)
end