Packages

Library faciliating OpenID authentication flow throughout Phoenix application(s)

Current section

Files

Jump to
keen_auth lib storage.ex
Raw

lib/storage.ex

defmodule KeenAuth.Storage do
alias KeenAuth.AuthenticationController
alias KeenAuth.Config
@default_storage KeenAuth.Storage.Session
@callback store(
conn :: Plug.Conn.t(),
provider :: atom(),
mapped_user :: KeenAuth.User.t() | map(),
oauth_response :: AuthenticationController.oauth_callback_response() | nil
) :: {:ok, Plug.Conn.t()}
@callback current_user(conn :: Plug.Conn.t()) :: any() | nil
@callback authenticated?(conn :: Plug.Conn.t()) :: boolean()
@callback get_access_token(conn :: Plug.Conn.t()) :: binary() | nil
@callback get_id_token(conn :: Plug.Conn.t()) :: binary() | nil
@callback get_refresh_token(conn :: Plug.Conn.t()) :: binary() | nil
@callback get_provider(conn :: Plug.Conn.t()) :: binary() | nil
@callback delete(conn :: Plug.Conn.t()) :: Plug.Conn.t()
@callback put_provider(conn :: Plug.Conn.t(), provider :: atom()) :: Plug.Conn.t()
@callback put_tokens(conn :: Plug.Conn.t(), provider :: atom(), AuthenticationController.tokens_map()) :: Plug.Conn.t()
@callback put_current_user(conn :: Plug.Conn.t(), provider :: atom(), KeenAuth.User.t() | 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 store(conn, provider, mapped_user, oauth_response), do: unquote(__MODULE__).store(conn, provider, mapped_user, oauth_response)
def current_user(conn), do: unquote(__MODULE__).current_user(conn)
def authenticated?(conn), do: unquote(__MODULE__).authenticated?(conn)
def authenticated?(conn), do: unquote(__MODULE__).authenticated?(conn)
def get_access_token(conn), do: unquote(__MODULE__).get_access_token(conn)
def get_id_token(conn), do: unquote(__MODULE__).get_id_token(conn)
def get_refresh_token(conn), do: unquote(__MODULE__).get_refresh_token(conn)
def get_provider(conn), do: unquote(__MODULE__).get_provider(conn)
def delete(conn), do: unquote(__MODULE__).delete(conn)
def put_provider(conn, provider), do: unquote(__MODULE__).put_provider(conn, provider)
def put_tokens(conn, provider, tokens), do: unquote(__MODULE__).put_tokens(conn, provider, tokens)
def put_current_user(conn, provider, user), do: unquote(__MODULE__).put_current_user(conn, provider, user)
defoverridable unquote(__MODULE__)
end
end
def store(conn, provider, mapped_user, oauth_response) do
current_storage(conn).store(conn, provider, mapped_user, oauth_response)
end
def current_user(conn) do
current_storage(conn).current_user(conn)
end
def authenticated?(conn) do
current_storage(conn).authenticated?(conn)
end
def get_access_token(conn) do
current_storage(conn).get_access_token(conn)
end
def get_id_token(conn) do
current_storage(conn).get_id_token(conn)
end
def get_refresh_token(conn) do
current_storage(conn).get_refresh_token(conn)
end
def get_provider(conn) do
current_storage(conn).get_provider(conn)
end
def delete(conn) do
current_storage(conn).delete(conn)
end
def put_provider(conn, provider) do
current_storage(conn).put_provider(conn, provider)
end
def put_tokens(conn, provider, tokens) do
current_storage(conn).put_tokens(conn, provider, tokens)
end
def put_current_user(conn, provider, user) do
current_storage(conn).put_current_user(conn, provider, user)
end
def current_storage(conn) do
KeenAuth.Plug.fetch_config(conn)
|> get_storage()
end
def get_storage(config) do
Config.get(config, :storage, @default_storage)
end
end