40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
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;
|