Skip to main content

Effect

Enum Effect 

Source
#[non_exhaustive]
pub enum Effect {
Show 19 variants StoreSession { session: Session, replaces: Option<TokenHash>, }, DeleteSession { token_hash: TokenHash, }, SetCookie(SetCookie), RecordFailure { user_id: UserId, at: OffsetDateTime, ip_tag: Option<IpTag>, }, ClearFailures { user_id: UserId, }, RecordStepUpFailure { token_hash: TokenHash, }, ClearStepUpFailures { token_hash: TokenHash, }, RecordWrongPassword { key: AccountKey, }, UseTotpStep { user_id: UserId, step: TotpStep, }, UseRecoveryCode { user_id: UserId, hash: RecoveryCodeHash, }, StoreRecoveryCodes { user_id: UserId, hashes: Vec<RecoveryCodeHash>, }, StoreLinkToken { token_hash: TokenHash, link: LinkToken, }, SendMail(Mail), Audit(AuditEvent), RememberDevice { user_id: UserId, device_hash: TokenHash, seen_at: OffsetDateTime, }, CreateAccount(NewAccount), StorePassword { user_id: UserId, hash: PasswordHash, }, ActivateAccount { user_id: UserId, }, MarkStepUp { token_hash: TokenHash, at: OffsetDateTime, method: SignInMethod, },
}
Expand description

Something the app must do. Carry out every effect of a Transition or Refusal, in order.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

StoreSession

Insert the session. With replaces, delete the session with that token hash in the same transaction (a stage change issues a new token).

Fields

§session: Session

The session to insert.

§replaces: Option<TokenHash>

The session it replaces.

§

DeleteSession

Delete the session with this token hash.

Fields

§token_hash: TokenHash

Its token hash.

§

SetCookie(SetCookie)

Send this Set-Cookie header.

§

RecordFailure

Count one failure, atomically: UPDATE ... SET failures = failures + 1 ... RETURNING failures (never read-modify-write from the Account snapshot, or concurrent failures are lost). Then, with the returned count n, store LockoutPolicy::locked_until(n, at) as locked_until when it is Some, and append LockoutPolicy::lockout_event(user_id, n, at, ip_tag) when it is Some.

Fields

§user_id: UserId

Whose.

§ip_tag: Option<IpTag>

The client, for the lockout audit event.

§

ClearFailures

Reset the account’s failure count to 0 and clear locked_until.

Fields

§user_id: UserId

Whose.

§

RecordStepUpFailure

Count one wrong step-up guess against this session, atomically: UPDATE sessions SET step_up_failures = step_up_failures + 1 WHERE token_hash = ? RETURNING step_up_failures. Only under StepUpFailures::PerSession. When the guess reaches the limit the flow also ends the session (with DeleteSession); an app may end it as soon as the returned count satisfies StepUpFailures::ends_session, which also covers guesses that raced, and otherwise the next step-up from it is refused and ends it.

Fields

§token_hash: TokenHash

The session’s token hash.

§

ClearStepUpFailures

Reset this session’s step-up failure count to 0, after a step-up succeeded. Only under StepUpFailures::PerSession.

Fields

§token_hash: TokenHash

The session’s token hash.

§

RecordWrongPassword

Record a wrong password for the throttle (WrongPasswordThrottle::record).

Fields

§key: AccountKey

The address it counts under.

§

UseTotpStep

Store step as the account’s last used TOTP step, only if it is newer than the stored one (compare-and-set); if it is not, the code was raced and the sign-in must be refused.

Fields

§user_id: UserId

Whose.

§step: TotpStep

The matched step.

§

UseRecoveryCode

Mark this recovery code used, only if it is still unused (compare-and-set), as above.

Fields

§user_id: UserId

Whose.

§hash: RecoveryCodeHash

Which.

§

StoreRecoveryCodes

Replace the account’s recovery codes with these.

Fields

§user_id: UserId

Whose.

§hashes: Vec<RecoveryCodeHash>

The new hashes.

§

StoreLinkToken

Store a one-time link under its token hash.

Fields

§token_hash: TokenHash

Look-up key.

§link: LinkToken

The record.

§

SendMail(Mail)

Send this mail.

§

Audit(AuditEvent)

Append this audit event.

§

RememberDevice

Remember (or refresh last_seen_at of) the device with this cookie hash for the account. Forget devices unused for Config::device_ttl.

Fields

§user_id: UserId

Whose.

§device_hash: TokenHash

The device cookie’s hash.

§seen_at: OffsetDateTime

Now.

§

CreateAccount(NewAccount)

Create this inactive account; refuse duplicates by email.

§

StorePassword

Store the account’s new password hash.

Fields

§user_id: UserId

Whose.

§hash: PasswordHash

The hash.

§

ActivateAccount

Mark the account active.

Fields

§user_id: UserId

Whose.

§

MarkStepUp

Set the session’s authenticated_at and method: the step-up window starts again.

Fields

§token_hash: TokenHash

Which session.

Trait Implementations§

Source§

impl Clone for Effect

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Effect

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more