Expand description
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.
| Feature | What it provides |
|---|---|
| (none) | UserId, Role, Access, Method, Conflict, AuthConfig, MIN_PASSWORD_LEN and is_same_origin_path, the rule a ?next= is followed by |
alloc | the 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 |
musli02 | musli 0.2 Encode/Decode on the types, so an app can embed them in its own WebSocket messages |
musliweb05 | alloc + 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 |
axum08 | std + 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) |
sqll015 | std + 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) |
phrasebookcatalog01 | phrasebookcatalog01: 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§
- musliweb05
musliweb05 - 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.
- phrasebookcatalog01
phrasebookcatalog01 - watchword’s messages as a phrasebook-catalog 0.1 catalog,
L10N.
Structs§
- Auth
Config - What the sign-in page offers, from
GET /api/auth/config. - Cloudflare
Config alloc - The Cloudflare Access settings an app stores and edits.
- Created
User alloc - The answer to
POST /api/auth/users: the new user and their registration link, whose token is shown only this once. - Impersonator
alloc - The admin behind an impersonated session; see
UserInfo::impersonated_by. - Link
alloc - A registration or reset link’s token, shown once when issued.
- Login
Request alloc - The body of
POST /api/auth/login. - NewUser
alloc - A user to create. At least one of
loginandemailis required. - Password
Change alloc - The body of
POST /api/auth/account/password. - Register
Info alloc - What a registration or reset link is for, from
GET /api/auth/register/{token}. - Register
Request alloc - The body of
POST /api/auth/register/{token}. - Unknown
Access - The error parsing an unknown access state name.
- Unknown
Method - The error parsing an unknown sign-in method name.
- Unknown
Role - The error parsing an unknown role name.
- User
Change alloc - A change to a user.
Noneleaves a field as it is;Some(None)clears an optional one. - User
Entry alloc - A user in the admin list.
- UserId
- A user’s id. Apps convert to and from their own
u64ids withnewandgetorFrom, and to and from signed integers withTryFrom, which fails on a value out of the other’s range. With thesqll015feature it binds and reads as a sqll column directly. - User
Info alloc - What the frontend and the admin pages see of a user.
Enums§
- Access
- A user’s account state.
- Auth
Error alloc - The error of an
/api/authroute, 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}}. - Auth
Request alloc - One operation of watchword’s service, as the server’s
Auth::dispatchruns it and a frontend’s transport carries it. - Auth
Response alloc - The answer to an
AuthRequest, one variant per type of answer. - Conflict
- Which unique field a change conflicts on.
- Cookie
Change alloc - What an
AuthRequestdoes to the session cookie; seeAuthRequest::cookie. - Invalid
alloc - 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_passwordaccepts, 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_
email alloc - Trims and lowercases an email so lookups and comparisons are case-insensitive.
- validate_
password alloc - Returns why the password is not acceptable, if it is not.