Skip to main content

Crate watchword_core

Crate watchword_core 

Source
Expand description

github crates.io docs.rs

The types watchword’s server and frontends share: identities, roles, account state, the JSON wire types of the /api/auth routes, AuthError, and input validation.

Apps normally use these through watchword, which re-exports them as watchword::types and at its crate root, or through a frontend crate such as watchword-yew023. Released in lockstep with watchword.


§Features

The crate is no_std, and safe to build for wasm32-unknown-unknown with any feature but axum08 and sqll015. Only std is on by default.

FeatureWhat it provides
(none)UserId, Role, Access, Method, Conflict, AuthConfig, MIN_PASSWORD_LEN and is_same_origin_path, the rule a ?next= is followed by
allocthe wire types that hold strings (UserInfo, LoginRequest, CreatedUser, …), AuthError and its Invalid reasons, validate_password and normalize_email, and AuthRequest and AuthResponse, every operation of watchword’s service as one value, which the server’s Auth::dispatch runs and a frontend’s transport carries
std (default)alloc, and the standard library for the dependencies that have it
musli02musli 0.2 Encode/Decode on the types, so an app can embed them in its own WebSocket messages
musliweb05alloc + musli02 + musliweb05: the account, user-management and Cloudflare Access settings endpoints and AuthBroadcast as musli-web 0.5 API types, with their ids pinned in 32000–32255
axum08std + axum 0.8 IntoResponse for AuthError, answering with its JSON body and status, and for AuthResponse; watchword’s axum08 feature turns it on (not for wasm)
sqll015std + sqll 0.15 BindValue, Bind and FromColumn for UserId (an integer with the same bits) and for Role, Access and Method (their names as text), so an app’s own statements bind and read them directly; watchword’s sqll015 feature turns it on. It takes sqll with threadsafe only; the app names bundled or links its own SQLite (not for wasm)
phrasebookcatalog01phrasebookcatalog01: L10N, watchword’s messages (the text of its Yew components) as a phrasebook-catalog 0.1 catalog, which phrasebook 0.2 takes, for a tool such as an app’s localization checker that needs them without building a frontend; it needs neither std nor alloc. watchword-yew023 re-exports it, and watchword’s phrasebookcatalog01 and yew023 features turn it on

Modules§

musliweb05musliweb05
watchword’s account and user-management operations, and its live updates, as musli-web 0.5 API types, so an app can carry them on the musli-web WebSocket it already has.
phrasebookcatalog01phrasebookcatalog01
watchword’s messages as a phrasebook-catalog 0.1 catalog, L10N.

Structs§

AuthConfig
What the sign-in page offers, from GET /api/auth/config.
CloudflareConfigalloc
The Cloudflare Access settings an app stores and edits.
CreatedUseralloc
The answer to POST /api/auth/users: the new user and their registration link, whose token is shown only this once.
Impersonatoralloc
The admin behind an impersonated session; see UserInfo::impersonated_by.
Linkalloc
A registration or reset link’s token, shown once when issued.
LoginRequestalloc
The body of POST /api/auth/login.
NewUseralloc
A user to create. At least one of login and email is required.
PasswordChangealloc
The body of POST /api/auth/account/password.
RegisterInfoalloc
What a registration or reset link is for, from GET /api/auth/register/{token}.
RegisterRequestalloc
The body of POST /api/auth/register/{token}.
UnknownAccess
The error parsing an unknown access state name.
UnknownMethod
The error parsing an unknown sign-in method name.
UnknownRole
The error parsing an unknown role name.
UserChangealloc
A change to a user. None leaves a field as it is; Some(None) clears an optional one.
UserEntryalloc
A user in the admin list.
UserId
A user’s id. Apps convert to and from their own u64 ids with new and get or From, and to and from signed integers with TryFrom, which fails on a value out of the other’s range. With the sqll015 feature it binds and reads as a sqll column directly.
UserInfoalloc
What the frontend and the admin pages see of a user.

Enums§

Access
A user’s account state.
AuthErroralloc
The error of an /api/auth route, sent as the JSON body of its 4xx response, such as {"error":"conflict","detail":"email"} or {"error":"invalid","detail":{"reason":"password_too_short","min":8}}.
AuthRequestalloc
One operation of watchword’s service, as the server’s Auth::dispatch runs it and a frontend’s transport carries it.
AuthResponsealloc
The answer to an AuthRequest, one variant per type of answer.
Conflict
Which unique field a change conflicts on.
CookieChangealloc
What an AuthRequest does to the session cookie; see AuthRequest::cookie.
Invalidalloc
Why a request is invalid, the detail of AuthError::Invalid.
Method
The credential a user has stored. A user has exactly one, and can switch between them. Cloudflare Access is not a stored credential.
Role
A user’s role.

Constants§

MIN_PASSWORD_LEN
The shortest password validate_password accepts, in bytes.

Functions§

is_same_origin_path
Whether path, a ?next= value once decoded, is a path on this origin, and so safe to send a browser to after signing in.
normalize_emailalloc
Trims and lowercases an email so lookups and comparisons are case-insensitive.
validate_passwordalloc
Returns why the password is not acceptable, if it is not.