Packages

WebSocket-first Elixir framework with auto-generated HTTP MCP APIs

Current section

Files

Jump to
dialup priv templates dialup.gen.auth user_token.ex.eex
Raw

priv/templates/dialup.gen.auth/user_token.ex.eex

defmodule <%= schema_module %>Token do
use Ecto.Schema
import Ecto.Query
alias <%= schema_module %>
@hash_algorithm :sha256
@session_validity_in_days 60
@reset_password_validity_in_days 1
schema "users_tokens" do
field :token, :binary
field :context, :string
belongs_to :user, <%= schema_module %>
timestamps(type: :utc_datetime, updated_at: false)
end
def build_session_token(user) do
token = Dialup.Auth.SessionToken.generate()
{token, build_hashed_token(user, "session", token)}
end
def build_email_token(user, context) do
token = Dialup.Auth.SessionToken.generate()
{token, build_hashed_token(user, context, token)}
end
def verify_session_token_query(token) do
query =
from token in token_and_context_query(token, "session"),
join: user in assoc(token, :user),
where: token.inserted_at > ago(@session_validity_in_days, "day"),
select: user
{:ok, query}
end
def verify_email_token_query(token, context) do
days =
case context do
"reset_password" -> @reset_password_validity_in_days
_ -> 7
end
query =
from token in token_and_context_query(token, context),
join: user in assoc(token, :user),
where: token.inserted_at > ago(^days, "day"),
select: user
{:ok, query}
end
defp build_hashed_token(user, context, token) do
%<%= schema_module %>Token{
token: Dialup.Auth.SessionToken.hash(token),
context: context,
user_id: user.id
}
end
def token_and_context_query(token, context) do
from <%= schema_module %>Token, where: [token: ^Dialup.Auth.SessionToken.hash(token), context: ^context]
end
def user_and_context_query(user, context) do
from t in <%= schema_module %>Token, where: t.user_id == ^user.id and t.context == ^context
end
end