Files
GoMembership/frontend/src/hooks.server.js
2024-10-08 07:39:21 +02:00

84 lines
2.6 KiB
JavaScript

import { BASE_API_URI } from "$lib/utils/constants.js";
/** @type {import('@sveltejs/kit').Handle} */
export async function handle({ event, resolve }) {
if (event.locals.user) {
// if there is already a user in session load page as normal
return await resolve(event);
}
// get cookies from browser
const jwt = event.cookies.get("jwt");
if (!jwt) {
// if there is no jwt load page as normal
return await resolve(event);
}
const response = await fetch(`${BASE_API_URI}/backend/users/current`, {
credentials: "include",
headers: {
Cookie: `jwt=${jwt}`,
},
});
if (!response.ok) {
// Clear the invalid JWT cookie
event.cookies.delete("jwt", { path: "/" });
return await resolve(event);
}
// find the user based on the jwt
const data = await response.json();
// Check if the server sent a new token
const newToken = response.headers.get("Set-Cookie");
if (newToken) {
const match = newToken.match(/jwt=([^;]+)/);
if (match) {
event.cookies.set("jwt", match[1], {
path: "/",
httpOnly: true,
secure: process.env.NODE_ENV === "production", // Secure in production
sameSite: "lax",
maxAge: 5 * 24 * 60 * 60, // 5 days in seconds
});
}
}
event.locals.subscriptions = data.subscriptions;
event.locals.user = data.user;
event.locals.licence_categories = data.licence_categories;
console.dir(event.locals.user);
if (event.locals.user.date_of_birth) {
event.locals.user.date_of_birth =
event.locals.user.date_of_birth.split("T")[0];
}
if (event.locals.user.membership) {
if (event.locals.user.membership.start_date) {
event.locals.user.membership.start_date =
event.locals.user.membership.start_date.split("T")[0];
}
if (event.locals.user.membership.end_date) {
event.locals.user.membership.end_date =
event.locals.user.membership.end_date.split("T")[0];
}
}
if (event.locals.user.drivers_licence?.issued_date) {
event.locals.user.drivers_licence.issued_date =
event.locals.user.drivers_licence.issued_date.split("T")[0];
}
if (event.locals.user.drivers_licence?.expiration_date) {
event.locals.user.drivers_licence.expiration_date =
event.locals.user.drivers_licence.expiration_date.split("T")[0];
}
if (
event.locals.user.bank_account &&
event.locals.user.bank_account.mandate_date_signed
) {
event.locals.user.bank_account.mandate_date_signed =
event.locals.user.bank_account.mandate_date_signed.split("T")[0];
}
// load page as normal
return await resolve(event);
}