lib/config.ex

defmodule Auth0Jwks.Config do
  defmodule MissingValueError do
    defexception [:message]
  end

  defp get_config_or_error(parent, child) do
    case Application.get_env(parent, child) do
      nil ->
        raise MissingValueError, message: "Auth0 config [:#{parent}, :#{child}] is not set"

      value ->
        value
    end
  end

  def get_opt_or_error(opts, opt_to_get, parent_module) do
    case Keyword.get(opts, opt_to_get) do
      nil ->
        raise MissingValueError, message: "#{parent_module} config :#{opt_to_get} is not set"

      value ->
        value
    end
  end

  def iss, do: get_config_or_error(:auth0_jwks, :iss)
  def aud, do: get_config_or_error(:auth0_jwks, :aud)
  def jwks_url, do: iss() <> ".well-known/jwks.json"

  def json_library, do: Application.get_env(:auth0_jwks, :json_library) || Poison
  def timeout, do: Application.get_env(:auth0_jwks, :timeout) || 50_000
end