Packages

Library faciliating OpenID authentication flow throughout Phoenix application(s)

Current section

Files

Jump to
keen_auth lib processor.ex
Raw

lib/processor.ex

defmodule KeenAuth.Processor do
alias KeenAuth.AuthenticationController
alias KeenAuth.Strategy
@default_processor KeenAuth.Processor.Default
@callback process(
conn :: Plug.Conn.t(),
provider :: atom(),
mapped_user :: KeenAuth.User.t() | map(),
response :: AuthenticationController.oauth_callback_response() | nil
) ::
{:ok, Plug.Conn.t(), KeenAuth.User.t() | map(), AuthenticationController.oauth_callback_result() | nil} | Plug.Conn.t()
@callback sign_out(conn :: Plug.Conn.t(), provider :: binary(), params :: map()) :: Plug.Conn.t()
defmacro __using__(_params \\ nil) do
quote do
@behaviour unquote(__MODULE__)
def process(conn, provider, mapped_user, oauth_response), do: unquote(__MODULE__).process(conn, provider, mapped_user, oauth_response)
def sign_out(conn, provider, params), do: unquote(__MODULE__).sign_out(conn, provider, params)
defoverridable unquote(__MODULE__)
end
end
def process(conn, provider, mapped_user, oauth_response) do
current_processor(conn, provider).process(conn, provider, mapped_user, oauth_response)
end
def sign_out(conn, provider, params) do
current_processor(conn, provider).signout(conn, provider, params)
end
def current_processor(conn, provider) do
KeenAuth.Plug.fetch_config(conn)
|> get_processor(provider)
end
def get_processor(config, provider) do
Strategy.get_strategy(config, provider)[:processor] || @default_processor
end
end