lib/plug/get_user.ex

defmodule Auth0Jwks.Plug.GetUser do
  @behaviour Plug
  import Plug.Conn

  def init(opts), do: opts

  def call(%{assigns: %{auth0_claims: claims, auth0_access_token: token}} = conn, opts) do
    user_from_claim_fn = Auth0Jwks.Config.get_opt_or_error(opts, :user_from_claim, __MODULE__)

    case user_from_claim_fn.(claims, token) do
      {:ok, current_user} ->
        assign(conn, :current_user, current_user)

      _ ->
        Auth0Jwks.Plug.Response.user_not_found(conn, opts)
    end
  end

  def call(conn, opts), do: Auth0Jwks.Plug.Response.user_not_found(conn, opts)
end