Packages
charon
0.0.1-alpha
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/models/session.ex
defmodule Charon.Models.Session do
@moduledoc """
A session.
"""
defstruct [
:created_at,
:id,
:type,
:user_id,
:expires_at,
:refresh_token_id,
:refreshed_at,
extra_payload: %{}
]
@type t :: %__MODULE__{
created_at: integer,
expires_at: integer | nil,
extra_payload: map(),
id: String.t(),
refresh_token_id: String.t(),
refreshed_at: integer,
type: atom(),
user_id: pos_integer | binary()
}
alias Charon.{Config, Internal}
@doc """
Create a new session from config values and overrides.
Provides defaults for `:id`, `:created_at` and `:expires_at`.
"""
@spec new(Config.t(), keyword() | map()) :: t()
def new(config, overrides \\ []) do
now = Internal.now()
defaults = %{
id: Internal.random_url_encoded(16),
created_at: now,
expires_at: expires_at(config, now)
}
enum = Map.merge(defaults, Map.new(overrides))
struct!(__MODULE__, enum)
end
###########
# Private #
###########
defp expires_at(%{session_ttl: nil}, _now), do: nil
defp expires_at(%{session_ttl: ttl}, now), do: ttl + now
end