feat: add invite registration links with configurable usage limits

Admins can create one-time registration links (1–5× or unlimited uses)
with optional expiry (1d–14d or never). Recipients can register even
when public registration is disabled. Atomic usage counting prevents
race conditions, all endpoints are rate-limited.
This commit is contained in:
Maurice
2026-03-29 12:49:15 +02:00
parent d909aac751
commit 99514ddce1
15 changed files with 388 additions and 13 deletions

View File

@@ -274,6 +274,24 @@ const nl: Record<string, string> = {
'admin.toast.createError': 'Gebruiker aanmaken mislukt',
'admin.toast.fieldsRequired': 'Gebruikersnaam, e-mail en wachtwoord zijn verplicht',
'admin.createUser': 'Gebruiker aanmaken',
'admin.invite.title': 'Uitnodigingslinks',
'admin.invite.subtitle': 'Eenmalige registratielinks aanmaken',
'admin.invite.create': 'Link aanmaken',
'admin.invite.createAndCopy': 'Aanmaken en kopiëren',
'admin.invite.empty': 'Nog geen uitnodigingslinks aangemaakt',
'admin.invite.maxUses': 'Max. gebruik',
'admin.invite.expiry': 'Verloopt na',
'admin.invite.uses': 'gebruikt',
'admin.invite.expiresAt': 'verloopt op',
'admin.invite.createdBy': 'door',
'admin.invite.active': 'Actief',
'admin.invite.expired': 'Verlopen',
'admin.invite.usedUp': 'Opgebruikt',
'admin.invite.copied': 'Uitnodigingslink gekopieerd',
'admin.invite.copyLink': 'Link kopiëren',
'admin.invite.deleted': 'Uitnodigingslink verwijderd',
'admin.invite.createError': 'Fout bij aanmaken van link',
'admin.invite.deleteError': 'Fout bij verwijderen van link',
'admin.tabs.settings': 'Instellingen',
'admin.allowRegistration': 'Registratie toestaan',
'admin.allowRegistrationHint': 'Nieuwe gebruikers kunnen zichzelf registreren',