diff --git a/frontend/src/hooks.server.js b/frontend/src/hooks.server.js index e228e1c..1bf77d6 100644 --- a/frontend/src/hooks.server.js +++ b/frontend/src/hooks.server.js @@ -1,4 +1,5 @@ import { BASE_API_URI } from "$lib/utils/constants.js"; +import { refreshCookie, userDatesFromRFC3339 } from "$lib/utils/helpers"; /** @type {import('@sveltejs/kit').Handle} */ export async function handle({ event, resolve }) { @@ -30,52 +31,29 @@ export async function handle({ event, resolve }) { // 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 - }); - } - } + refreshCookie(newToken, event); - event.locals.subscriptions = data.subscriptions; + userDatesFromRFC3339(data.user); + + const [subscriptionsResponse, licenceCategoriesResponse] = await Promise.all([ + fetch(`${BASE_API_URI}/backend/membership/subscriptions`, { + credentials: "include", + headers: { Cookie: `jwt=${jwt}` }, + }), + fetch(`${BASE_API_URI}/backend/licence/categories`, { + credentials: "include", + headers: { Cookie: `jwt=${jwt}` }, + }), + ]); + const [subscriptionsData, licence_categoriesData] = await Promise.all([ + subscriptionsResponse.json(), + licenceCategoriesResponse.json(), + ]); 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.licence?.issued_date) { - event.locals.user.licence.issued_date = - event.locals.user.licence.issued_date.split("T")[0]; - } - if (event.locals.user.licence?.expiration_date) { - event.locals.user.licence.expiration_date = - event.locals.user.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]; - } + event.locals.subscriptions = subscriptionsData.subscriptions; + event.locals.licence_categories = licence_categoriesData.licence_categories; + // console.log("hooks.server: Printing locals:"); + // console.dir(event.locals); // load page as normal return await resolve(event); diff --git a/frontend/src/routes/+layout.js b/frontend/src/routes/+layout.js index 88edb1d..dfd1601 100644 --- a/frontend/src/routes/+layout.js +++ b/frontend/src/routes/+layout.js @@ -1,5 +1,7 @@ /** @type {import('./$types').LayoutLoad} */ export async function load({ fetch, url, data }) { - const { user } = data; - return { fetch, url: url.pathname, user }; + const user = data.user; + const subscriptions = data.subscriptions; + const licence_categories = data.licence_categories; + return { fetch, url: url.pathname, user, subscriptions, licence_categories }; } diff --git a/frontend/src/routes/+layout.server.js b/frontend/src/routes/+layout.server.js index 6cf562a..c4575fe 100644 --- a/frontend/src/routes/+layout.server.js +++ b/frontend/src/routes/+layout.server.js @@ -1,58 +1,11 @@ import { BASE_API_URI } from "$lib/utils/constants"; import { refreshCookie } from "$lib/utils/helpers"; import { redirect } from "@sveltejs/kit"; -import { library } from "$lib/stores/library"; /** @type {import('./$types').LayoutServerLoad} */ export async function load({ locals, cookies }) { - const jwt = cookies.get("jwt"); - try { - // Fetch subscriptions, and licence categories in parallel - const [subscriptionsResponse, licenceCategoriesResponse] = - await Promise.all([ - fetch(`${BASE_API_URI}/backend/membership/subscriptions`, { - credentials: "include", - headers: { Cookie: `jwt=${jwt}` }, - }), - fetch(`${BASE_API_URI}/backend/licence/categories`, { - credentials: "include", - headers: { Cookie: `jwt=${jwt}` }, - }), - ]); - - // Check if any of the responses are not ok - if (!subscriptionsResponse.ok || !licenceCategoriesResponse.ok) { - cookies.delete("jwt", { path: "/" }); - throw redirect(302, "/"); - } - - // Parse the JSON responses - const [subscriptionsData, licence_categoriesData] = await Promise.all([ - subscriptionsResponse.json(), - licenceCategoriesResponse.json(), - ]); - // Check if the server sent a new token - const newToken = - subscriptionsResponse.headers.get("Set-Cookie") == null - ? licenceCategoriesResponse.headers.get("Set-Cookie") - : subscriptionsResponse.headers.get("Set-Cookie"); - - refreshCookie(newToken, null); - - return { - user: locals.user, - licence_categories: licence_categoriesData.licence_categories, - subscriptions: subscriptionsData.subscriptions, - }; - } catch (error) { - console.error("Error fetching data:", error); - // In case of any error, clear the JWT cookie - cookies.delete("jwt", { path: "/" }); - //throw redirect(302, "/"); - } - return { user: locals.user, - licence_categories: [], - subscriptions: [], + licence_categories: locals.licence_categories, + subscriptions: locals.subscriptions, }; } diff --git a/frontend/src/routes/auth/about/[id]/+page.svelte b/frontend/src/routes/auth/about/[id]/+page.svelte index aff0fb4..d383b1c 100644 --- a/frontend/src/routes/auth/about/[id]/+page.svelte +++ b/frontend/src/routes/auth/about/[id]/+page.svelte @@ -4,14 +4,11 @@ import { onMount } from "svelte"; import { page } from "$app/stores"; import { t } from "svelte-i18n"; - import { library } from "$lib/stores/library"; /** @type {import('./$types').ActionData} */ export let form; - $: user = $page.data.user; - - $: ({ licence_categories, subscriptions } = $library); + $: ({ user, licence_categories, subscriptions } = $page.data); let showModal = false;