Lockspire.Host.AccountResolver behaviour (lockspire v1.0.0)

Copy Markdown

Singular host seam for account lookup, claim material, and login handoff.

Summary

Types

account()

@type account() :: term()

connection()

@type connection() :: Plug.Conn.t() | Phoenix.LiveView.Socket.t() | term()

context()

@type context() :: Lockspire.Host.Context.t()

Callbacks

build_claims(account, context)

@callback build_claims(account(), context()) ::
  {:ok, Lockspire.Host.Claims.t()} | {:error, term()}

redirect_for_login(conn_or_socket, context)

@callback redirect_for_login(conn_or_socket :: connection(), context()) ::
  Lockspire.Host.InteractionResult.t()

redirect_for_logout(conn_or_socket, context)

(optional)
@callback redirect_for_logout(conn_or_socket :: connection(), context()) ::
  Lockspire.Host.InteractionResult.t()

resolve_account(account_reference, context)

@callback resolve_account(account_reference :: term(), context()) ::
  {:ok, account()} | {:error, :not_found | term()}

resolve_current_account(conn_or_socket, context)

@callback resolve_current_account(conn_or_socket :: connection(), context()) ::
  {:ok, account()} | {:redirect, Lockspire.Host.InteractionResult.t()}

verify_backchannel_user_code(subject_id, user_code, context)

(optional)
@callback verify_backchannel_user_code(
  subject_id :: String.t(),
  user_code :: String.t(),
  context()
) :: :ok | {:error, :invalid_user_code | term()}

Verifies the CIBA user_code (PIN/password) provided by the client.