import type { Handle } from "@sveltejs/kit"; import { error, redirect } from "@sveltejs/kit"; import SessionStore from "$lib/server/session_store" import { init_db, close_db, get_user } from "$lib/server/database"; async function init() { if (process.env.APP_USER_DATA_PATH == null) { console.log("APP_USER_DATA_PATH is not defined. Exiting."); process.exit(-1); } if (process.env.APP_TMP_USER_DATA_PATH == null) { console.log("APP_TMP_USER_DATA_PATH is not defined. Exiting."); process.exit(-1); } await init_db(); console.log("started"); } function deinit() { close_db(); console.log('exit'); } await init(); process.on('exit', (_) => { deinit(); process.exit(0); }); process.on('SIGINT', (_) => { console.log("SIGINT") process.exit(0); }) export let handle: Handle = async function ({ event, resolve }) { console.log("incoming ", event.request.method, " request to: ", event.url.href, " (route id: ", event.route.id, ")"); event.setHeaders({ //"Strict-Transport-Security": "max-age=63072000; includeSubdomains; preload", "X-Frame-Options": "Deny", "X-Content-Type-Options": "nosniff", "Referrer-Policy": "strict-origin-when-cross-origin" }) if (event.route.id == null) { return error(404, "This page does not exist."); } const token = event.cookies.get("session_id") const user = SessionStore.get_user_by_access_token(token ?? "") console.log("tried access with token: ", token) if (!token || !user) { if (event.request.method == "POST" && event.route.id != "/login") { return error(401, "Invalid Session"); } if (token) { event.cookies.delete("session_id", { path: "/" }); } if (event.route.id == "/login") { return await resolve(event); } else { event.url.searchParams.set("redirect", event.route.id); return redirect(302, `/login?${event.url.searchParams}`); } } event.locals.user = user; return await resolve(event); }