import { fail, redirect } from '@sveltejs/kit'; import type { Actions, PageServerLoad } from './$types'; import { deleteLinkToken, passwordResetIsValid, readLinkToken, RESET_COOKIE, resetPassword, storeLinkToken, validPassword } from '#lib/server/auth.js'; export const load: PageServerLoad = ({ url, cookies }) => { const queryToken = url.searchParams.get('token'); if (queryToken) { if (queryToken.length <= 100) storeLinkToken(cookies, RESET_COOKIE, queryToken); else deleteLinkToken(cookies, RESET_COOKIE); redirect(303, '/passwort-zuruecksetzen'); } return { valid: passwordResetIsValid(readLinkToken(cookies, RESET_COOKIE)) }; }; export const actions = { default: async ({ request, cookies }) => { const data = await request.formData(); const token = readLinkToken(cookies, RESET_COOKIE); const password = String(data.get('password') || ''); if (!validPassword(password)) { return fail(400, { error: 'Das neue Passwort muss mindestens 12 Zeichen lang sein.' }); } try { await resetPassword(token, password); deleteLinkToken(cookies, RESET_COOKIE); } catch { return fail(400, { error: 'Der Link ist ungültig, abgelaufen oder bereits verwendet.' }); } redirect(303, '/login?reset=erfolgreich'); } } satisfies Actions;