diff --git a/src/handles/handle.ts b/src/handles/handle.ts new file mode 100644 index 0000000..3bec8b1 --- /dev/null +++ b/src/handles/handle.ts @@ -0,0 +1,43 @@ +import { AppData } from "$lib/classes/app-sessions"; +import { logger } from "$lib/utils/logger"; +import { error, redirect, type Handle } from "@sveltejs/kit"; +import { sequence } from "@sveltejs/kit/hooks"; + + +const sessionConstructorHandle = (async ({event, resolve}) => { + + const data = await AppData.extractAppDataFromCookies(event.cookies) + + logger.debug(`Session Data: ${data}`, "Session Handle") + + event.locals.session = data + + return await resolve(event) + +}) satisfies Handle + + +const apiHandle = (async ({event, resolve}) => { + + logger.debug(event.url.pathname, "API Handle") + logger.debug(`Session Data: ${event.locals.session}`, "API Handle") + + if(!event.url.pathname.startsWith("/api/program")) { + // next handle + return await resolve(event) + } + + if (!event.locals.session) { + // Satisfies HTTP Codes: + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/401 + return error(401, "Not Authorized") + } + + return await resolve(event) + +}) satisfies Handle + +export const handles = sequence( + sessionConstructorHandle, + apiHandle +) \ No newline at end of file