Changeset 24cdcc6 in Klonkt for src/routes


Ignore:
Timestamp:
06/23/2026 02:11:51 PM (3 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
8f2f97c
Parents:
3af8fa3
Message:

setup: first-run wizard (language choice + site name) on /auth/register

A fresh install now shows a friendly wizard: choose your language (EN/NL/DE,
immediately set as the site default via default_lang), give your site a name,
and create your admin account. The site gets the klonkt brand colours. Only
shown when there are 0 users; existing installs unchanged. Tested on a fresh
DB (GET+POST).

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/auth.js

    r3af8fa3 r24cdcc6  
    1717}
    1818import { mailerConfigured, sendMail } from '../config/mailer.js';
     19import { resolveLang, t } from '../services/i18n.js';
     20import { setSetting } from '../services/SettingsService.js';
    1921
    2022const router = express.Router();
     
    124126  if (!isSetupMode()) return res.redirect('/auth/login' + (next ? '?next=' + encodeURIComponent(next) : ''));
    125127  renderPage(req, res, 'pages/auth-register', {
    126     pageTitle: 'Beheerder aanmaken', bodyClass: 'on-special',
    127     error: null, username: '', email: '', next,
     128    pageTitle: t(resolveLang(req), 'setup.title'), bodyClass: 'on-special',
     129    error: null, username: '', email: '', siteName: '', next,
    128130  });
    129131});
    130132
    131133router.post('/register', registerLimiter, (req, res) => {
    132   const { username, email, password } = req.body;
     134  const { username, email, password, siteName } = req.body;
    133135  const next = safeNext(req.body.next) || '';
    134136  const renderErr = (error) => renderPage(req, res, 'pages/auth-register', {
    135     pageTitle: 'Beheerder aanmaken', bodyClass: 'on-special',
    136     error, username: username || '', email: email || '', next,
     137    pageTitle: t(resolveLang(req), 'setup.title'), bodyClass: 'on-special',
     138    error, username: username || '', email: email || '', siteName: siteName || '', next,
    137139  });
    138140
     
    155157
    156158  // Persoonlijke site auto-aanmaken (single-tenant-ombouw volgt later).
     159  // Setup-wizard: sitenaam + taal komen uit het formulier; taal = de taal waarin
     160  // de bezoeker de wizard invulde (resolveLang) en wordt meteen de site-standaard.
    157161  if (!db.prepare('SELECT 1 FROM sites LIMIT 1').get()) {
    158162    const siteId = uuid();
     163    const lang = resolveLang(req);
     164    const title = (siteName || '').trim().slice(0, 80) || (username + "'s Site");
    159165    db.prepare(`
    160166      INSERT INTO sites (id, slug, title, description, owner_id, palette, accent, language)
    161       VALUES (?, ?, ?, ?, ?, 'sage', '#c2410c', 'nl')
    162     `).run(siteId, username.toLowerCase(), username + "'s Site", 'Welkom', userId);
     167      VALUES (?, ?, ?, ?, ?, 'klonkt', '#e8b04b', ?)
     168    `).run(siteId, username.toLowerCase(), title, '', userId, lang);
    163169    db.prepare(`INSERT INTO site_members (site_id, user_id, role) VALUES (?, ?, 'admin')`).run(siteId, userId);
     170    try { setSetting('default_lang', lang); } catch (e) { /* niet fataal */ }
    164171  }
    165172
Note: See TracChangeset for help on using the changeset viewer.