import type { Actions } from "@sveltejs/kit"; import type { PageServerLoad } from "./$types"; import { fail, redirect } from "@sveltejs/kit"; import { base } from "$app/paths" import { authorize_password } from "$lib/server/auth"; import SessionStore from "$lib/server/session_store"; export const load: PageServerLoad = ({ locals, url }) => { let redirect_url = url.searchParams.get("redirect") ?? "/"; if (locals.user != null) { redirect(302, redirect_url); } } export const actions = { login: async ({ locals, request, cookies, url }) => { let redirect_url = url.searchParams.get("redirect") ?? "/"; if (locals.user != null) { redirect(302, redirect_url); } const params = await request.formData(); const username = params.get("username") as string | null; const password = params.get("password") as string | null; if (username == null || password == null) { return fail(400, { message: "Invalid request" }); } const user = await authorize_password(username, password); if (user == null) { return fail(403, { message: "Benutzername oder Passwort falsch.", username: username }) } const expiry_date = new Date(Date.now() + 15*60*1000) const token = SessionStore.issue_access_token_for_user(user, expiry_date) cookies.set("session_id", token, { expires: expiry_date, httpOnly: true, secure: true, sameSite: 'strict', path: base }) redirect(302, redirect_url); }, logout: async ({ locals, cookies }) => { if (locals.user == null) { return fail(403, { message: "Not logged in." }); } const token = cookies.get("session_id"); if (!token) { console.log("how is this user logged in right now?"); return fail(500); } SessionStore.logout_user_session(token); cookies.delete("session_id", { path: base }); return redirect(302, `${base}/login`); } } satisfies Actions;