Ecto schema + record bridge for the logout session store
(AttestoPhoenix.Store.EctoLogoutSessionStore).
Backs Attesto.LogoutSessionStore: one row per (session, Relying Party)
pair, recording where to notify the RP when the session ends — the
backchannel_logout_uri a logout_token is POSTed to (Back-Channel Logout
1.0) and/or the frontchannel_logout_uri the logout page renders in an
iframe (Front-Channel Logout 1.0). A row is written at ID-Token mint and
leased and acknowledged by the end-session endpoint; it carries at least one
of the two URIs. Stable delivery identifiers and expiring owner leases make a
failed or interrupted notification retryable without letting a stale worker
delete another worker's claim. The durable attempt counter drives bounded
exponential backoff after failed deliveries.
This is the OP-side delivery map, not the browser login session — see
Attesto.LogoutSessionStore.
Summary
Functions
Build the insert changeset for a logout session from the core store record. Fail-closed: a missing required field is rejected, not defaulted, and a record carrying neither logout URI is rejected (there would be no way to notify the RP).
Fold a loaded row into the Attesto.LogoutSessionStore.target() shape.
Types
@type t() :: %AttestoPhoenix.Schema.LogoutSession{ __meta__: term(), backchannel_logout_uri: term(), client_id: term(), delivery_attempts: term(), delivery_id: term(), expires_at: term(), frontchannel_logout_uri: term(), frontchannel_session_required: term(), id: term(), inserted_at: term(), lease_expires_at: term(), lease_id: term(), session_required: term(), sid: term(), subject: term() }
Functions
@spec from_record(Attesto.LogoutSessionStore.entry(), keyword()) :: Ecto.Changeset.t()
Build the insert changeset for a logout session from the core store record. Fail-closed: a missing required field is rejected, not defaulted, and a record carrying neither logout URI is rejected (there would be no way to notify the RP).
@spec to_target(t()) :: Attesto.LogoutSessionStore.target()
Fold a loaded row into the Attesto.LogoutSessionStore.target() shape.