defmodule Ueberauth.Strategy.Amco.Plugs.AuthenticatedUser do
@moduledoc """
This plug uses different adapters to validate the access token
provider in the request. IdpAdapter will do that against the
Identity Provider server. In test env you may want to use the
MockAdapter to avoid making request to the IdP server while the
tests are running.
"""
alias Plug.Conn
alias Ueberauth.Strategy.Amco.User
alias Ueberauth.Strategy.Amco.Exceptions
alias Ueberauth.Strategy.Amco.Plugs.AuthenticatedUser
alias Ueberauth.Strategy.Amco.Plugs.AuthenticatedUser.IdpAdapter
def init(opts) do
unless Keyword.get(opts, :error_handler) do
raise Exceptions.EmptyErrorHandler
end
unless Keyword.get(opts, :access_token_source) do
raise Exceptions.EmptyAccessTokenSource
end
opts
end
def call(%Conn{} = conn, opts) do
case adapter().call(conn, opts) do
{:ok, %User{} = user} ->
Conn.assign(conn, :current_user, user)
{:ok, %Conn{} = conn} ->
conn
{:error, error} ->
handler = Keyword.get(opts, :error_handler)
handler.access_token_error(conn, error)
end
end
defp adapter() do
Application.get_env(:ueberauth, AuthenticatedUser, [])
|> Keyword.get(:adapter, IdpAdapter)
end
end