Packages
charon
3.0.3
4.3.0
4.3.0-beta1
4.2.0
4.2.0-beta3
4.2.0-beta2
4.2.0-beta1
4.1.0
4.0.1
4.0.0
4.0.0-beta3
4.0.0-beta2
4.0.0-beta1
3.4.1
3.4.0
3.3.0
3.2.0
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-beta1
2.8.0
2.8.0-beta1
2.7.3
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.2.0-beta
2.1.3
2.1.2
2.1.2-beta
2.1.1
2.1.0
2.0.0
1.3.4
1.3.3
1.3.2-beta
1.3.1-beta
1.3.0-beta
1.2.0-beta
1.1.0-beta
1.0.1-beta
1.0.0-beta1
0.0.4-alpha
0.0.3-alpha
0.0.2-alpha
0.0.1-alpha
Authentication & sessions for API's.
Current section
Files
Jump to
Current section
Files
lib/charon/utils.ex
defmodule Charon.Utils do
@moduledoc """
Utility functions, mainly getters and setters for module internals.
"""
use Charon.Internal.Constants
alias Plug.Conn
alias Charon.Models.{Session, Tokens}
import Charon.Internal
@doc """
Get current session, if present.
"""
@spec get_session(Conn.t()) :: Session.t() | nil
def get_session(conn), do: get_private(conn, @session)
@doc """
Get tokens, if present.
"""
@spec get_tokens(Conn.t()) :: Tokens.t() | nil
def get_tokens(conn), do: get_private(conn, @tokens)
@doc """
Get auth errors, if present.
"""
@spec get_auth_error(Conn.t()) :: binary() | nil
def get_auth_error(conn), do: get_private(conn, @auth_error)
@doc """
Get the payload of the bearer token, if present.
"""
@spec get_bearer_token_payload(Conn.t()) :: map() | nil
def get_bearer_token_payload(conn), do: get_private(conn, @bearer_token_payload)
@doc """
Get token signature transport mechanism, if present.
"""
@spec get_token_signature_transport(Conn.t()) :: atom() | nil
def get_token_signature_transport(conn), do: get_private(conn, @token_signature_transport)
@doc """
Set token signature transport mechanism. Must be one of
`"bearer"`, `"cookie"`, `:bearer` or `:cookie`.
## Examples / doctests
iex> :bearer = %Conn{} |> set_token_signature_transport("bearer") |> get_token_signature_transport()
iex> :bearer = %Conn{} |> set_token_signature_transport(:bearer) |> get_token_signature_transport()
iex> :cookie = %Conn{} |> set_token_signature_transport("cookie") |> get_token_signature_transport()
iex> :cookie = %Conn{} |> set_token_signature_transport(:cookie) |> get_token_signature_transport()
iex> set_token_signature_transport(%Conn{}, "anything else")
** (FunctionClauseError) no function clause matching in Charon.Internal.parse_sig_transport/1
"""
@spec set_token_signature_transport(Conn.t(), binary() | :bearer | :cookie) :: Conn.t()
def set_token_signature_transport(conn, token_signature_transport) do
transport = parse_sig_transport(token_signature_transport)
put_private(conn, @token_signature_transport, transport)
end
@doc """
Set user id for session creation
"""
@spec set_user_id(Conn.t(), any) :: Conn.t()
def set_user_id(conn, user_id), do: put_private(conn, @user_id, user_id)
@doc "Put an auth error on the conn"
@spec set_auth_error(Plug.Conn.t(), any) :: Plug.Conn.t()
def set_auth_error(conn, error), do: put_private(conn, @auth_error, error)
@doc "Put a token payload on the conn"
@spec set_token_payload(Plug.Conn.t(), any) :: Plug.Conn.t()
def set_token_payload(conn, payload), do: put_private(conn, @bearer_token_payload, payload)
@doc "Put a token on the conn"
@spec set_token(Plug.Conn.t(), any) :: Plug.Conn.t()
def set_token(conn, token), do: put_private(conn, @bearer_token, token)
@doc "Put a session on the conn"
@spec set_session(Plug.Conn.t(), any) :: Plug.Conn.t()
def set_session(conn, session), do: put_private(conn, @session, session)
end