import { fail, redirect } from '@sveltejs/kit'; import type { Actions, PageServerLoad } from './$types'; import { createFirstAdmin, createSession, hasUsers, setupIsConfigured, validDisplayName, validEmail, validPassword } from '#lib/server/auth.js'; export const load: PageServerLoad = () => { if (hasUsers()) redirect(303, '/login'); return { configured: setupIsConfigured() }; }; export const actions = { default: async ({ request, cookies }) => { if (hasUsers()) redirect(303, '/login'); const data = await request.formData(); const setupToken = String(data.get('setupToken') || ''); const displayName = String(data.get('displayName') || '').trim(); const email = String(data.get('email') || '').trim(); const password = String(data.get('password') || ''); if (!validDisplayName(displayName) || !validEmail(email) || !validPassword(password)) { return fail(400, { error: 'Bitte Name, gültige E-Mail und ein Passwort mit mindestens 12 Zeichen prüfen.', displayName, email }); } try { const user = await createFirstAdmin({ setupToken, displayName, email, password }); createSession(user.id, cookies); } catch (cause) { const code = cause instanceof Error ? cause.message : ''; if (code === 'SETUP_CLOSED') redirect(303, '/login'); return fail(403, { error: 'Das Betreiber-Setup-Token ist ungültig.', displayName, email }); } redirect(303, '/fundus'); } } satisfies Actions;