dorfteich/apps/web/src/pages
Claude Fable 5 c2a4dde5cc
Some checks failed
CI / Lint, typecheck, test (pull_request) Successful in 6m50s
CI / Build container images (pull_request) Successful in 3m57s
CI / Auth e2e pack (pull_request) Failing after 6m18s
CI / Import/export fidelity gate (pull_request) Has been skipped
Invitation flow with per-user quota (#332)
Any authenticated user can invite an e-mail address; the mailed
single-use token lets exactly one signup through even while
registration is closed. Open (pending, unexpired) invitations count
against the new instance setting invitations.maxOpenPerUser (default 5,
0 disables inviting) — plus a 20/day per-user rate limit so a
revoke-and-recreate loop cannot become a mail cannon. Only the SHA-256
token hash is stored (auth-tokens pattern); a failed signup (taken
username) un-redeems the token so the invitee can retry.

Surfaces: invitations section in the user settings (list, invite,
revoke, quota line; wide table in a focusable .table-scroll region),
signup page reads ?invitation=<token> (preview banner, e-mail prefill,
closed-mode gate opens only for a previewed-valid token), admin general
card gets the quota field (flat RHF name per #322; VS-NfD marked and
hideable).

Governance: audit actions invitation.created/revoked/accepted
(catalogue 1.10), VS-NfD profile entry (compliant: 0) + hardening-guide
row, i18n de+en including the invitation mail template.

Tests: api e2e-db (mail link, closed-mode single-use signup with
un-redeem on failure, quota + revoke frees slot, quota 0 = 403, auth
matrix), new web e2e pack invitations.spec.ts (full UI loop through
Mailpit, wired into ci.yml with its own rate-limit reset), a11y scan
waits for the new section. Full api suite (107 files / 607 tests),
auth/admin-settings/a11y packs green against a fresh local stack.

Closes #332
2026-08-05 12:44:20 +02:00
..
auth Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
admin-settings-form.test.ts Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
admin-settings-form.ts Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
AdminBackupSection.tsx #245: mode hidden — hide profile-violating options, mark the hiding 2026-07-31 19:27:17 +02:00
AdminSettingsPage.tsx Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
AdminSystemPage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
BrandingManager.tsx #306: instance branding — logo and favicon, cropped in the browser 2026-08-01 19:30:52 +02:00
CustomFontManager.tsx #304: custom fonts in the pickers, an admin screen, and the licence page 2026-08-01 18:32:46 +02:00
DeletePageDialog.tsx #162: Fokus-Management für Dialoge und Such-Palette 2026-07-21 13:52:59 +02:00
FontCatalogPage.tsx #304: custom fonts in the pickers, an admin screen, and the licence page 2026-08-01 18:32:46 +02:00
HomePage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
InvitationsSection.tsx Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
LegalPage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
MaintenancePage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
MovePageDialog.tsx #162: Fokus-Management für Dialoge und Such-Palette 2026-07-21 13:52:59 +02:00
NotFoundPage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
PageActions.tsx #162: Fokus-Management für Dialoge und Such-Palette 2026-07-21 13:52:59 +02:00
PageEditorPage.tsx #213: warn on uploads to classified pages; instance policy can block 2026-07-31 07:33:34 +02:00
PageStatusBar.tsx #134 Statuszeile zwischen Navigation und Artikel 2026-07-19 01:04:11 +02:00
PluginManager.tsx #300: route icon-only controls through IconButton/IconLink 2026-08-01 06:56:13 +02:00
PluginPreviewPage.tsx Add the sandbox host runtime for plugin iframes (#73) 2026-07-11 09:16:30 +02:00
PondHomePage.tsx #302: configurable pond start page, created with every new pond 2026-08-01 08:06:35 +02:00
PondSettingsPage.tsx #307: pond-level branding overrides the instance logo and favicon 2026-08-01 20:44:02 +02:00
PublicPageView.tsx #207: print stylesheet with the classification on every printed sheet 2026-07-31 06:48:44 +02:00
QuotaManager.tsx Quota override cell stays a table cell, flex on an inner wrapper (#329) 2026-08-04 12:44:17 +02:00
SettingsPage.tsx Invitation flow with per-user quota (#332) 2026-08-05 12:44:20 +02:00
TrashPage.tsx #163: Dokumentsprache und Seitentitel der SPA 2026-07-21 13:52:59 +02:00
UserManager.tsx Admin can create user accounts directly (#331) 2026-08-05 12:23:01 +02:00