2025-04-20 22:35:12 +02:00
|
|
|
import type { Handle } from "@sveltejs/kit";
|
2025-06-05 14:32:12 +02:00
|
|
|
import { error, redirect } from "@sveltejs/kit";
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-06-05 14:32:12 +02:00
|
|
|
import SessionStore from "$lib/server/session_store"
|
2025-04-20 22:35:12 +02:00
|
|
|
import { init_db, close_db, get_user } from "$lib/server/database";
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
import Logs from "$lib/server/log";
|
|
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
async function init() {
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.process.info("Initializing server");
|
|
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
if (process.env.APP_USER_DATA_PATH == null) {
|
2025-07-11 05:10:46 +02:00
|
|
|
throw new Error("APP_USER_DATA_PATH is not defined. Exiting.");
|
2025-04-20 22:35:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (process.env.APP_TMP_USER_DATA_PATH == null) {
|
2025-07-11 05:10:46 +02:00
|
|
|
throw new Error("APP_TMP_USER_DATA_PATH is not defined. Exiting.");
|
2025-04-20 22:35:12 +02:00
|
|
|
}
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
await init_db();
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.process.info("Initializing of server complete")
|
2025-01-03 01:04:30 +01:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function deinit() {
|
|
|
|
|
close_db();
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
process.on('exit', (_) => {
|
2025-01-03 01:04:30 +01:00
|
|
|
deinit();
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.process.info("Exiting server")
|
2025-01-03 01:04:30 +01:00
|
|
|
process.exit(0);
|
|
|
|
|
});
|
|
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
process.on('SIGINT', (_) => {
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.process.info("Received SIGINT, shutting down")
|
2025-01-03 01:04:30 +01:00
|
|
|
process.exit(0);
|
|
|
|
|
})
|
|
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
process.on("uncaughtExceptionMonitor", (error, origin) => {
|
|
|
|
|
Logs.process.fatal(`Encountered uncaught exception (origin: ${origin}): ${error.name}${error.cause ? (" caused by "+error.cause) : ""}: ${error.message} `)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
await init();
|
|
|
|
|
|
2025-04-20 22:35:12 +02:00
|
|
|
export let handle: Handle = async function ({ event, resolve }) {
|
2025-06-05 14:32:12 +02:00
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.route.debug(`incoming ${event.request.method} request to: ${event.url.href} (route id: ${event.route.id})`);
|
2025-06-18 14:50:54 +02:00
|
|
|
|
|
|
|
|
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"
|
|
|
|
|
})
|
2025-01-03 01:04:30 +01:00
|
|
|
|
2025-07-11 05:10:46 +02:00
|
|
|
console.log(event.url.href)
|
2025-06-05 14:32:12 +02:00
|
|
|
if (event.route.id == null) {
|
2025-07-11 05:10:46 +02:00
|
|
|
Logs.route.info(`Tried to access a route which does not exist: ${event.url.href}`)
|
2025-06-05 14:32:12 +02:00
|
|
|
return error(404, "This page does not exist.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const token = event.cookies.get("session_id")
|
|
|
|
|
const user = SessionStore.get_user_by_access_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: "/" });
|
|
|
|
|
}
|
2025-04-20 22:35:12 +02:00
|
|
|
|
2025-06-05 14:32:12 +02:00
|
|
|
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}`);
|
|
|
|
|
}
|
2025-04-20 22:35:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event.locals.user = user;
|
2025-01-03 01:04:30 +01:00
|
|
|
|
|
|
|
|
return await resolve(event);
|
|
|
|
|
}
|