import { randomBytes } from 'node:crypto'; import { redirect } from '@sveltejs/kit'; import type { Handle } from '@sveltejs/kit/hooks'; import { deleteSession, getSessionUser, hasUsers, SESSION_COOKIE } from '#lib/server/auth.js'; const publicPaths = new Set([ '/', '/healthz', '/login', '/setup', '/einladung', '/passwort-vergessen', '/passwort-zuruecksetzen' ]); export const handle: Handle = async ({ event, resolve }) => { const presentationPath = event.url.pathname.startsWith('/heinzlive/'); const sharePath = event.url.pathname.startsWith('/freigabe/'); const shareMediaPath = /^\/freigabe\/[^/]+\/media\/[^/]+$/.test(event.url.pathname); const presentationTestPath = /^\/fundus\/[^/]+\/praesentation(?:\/|$)/.test(event.url.pathname); const token = event.cookies.get(SESSION_COOKIE); event.locals.user = getSessionUser(token); if (token && !event.locals.user) deleteSession(event.cookies); if ( !presentationPath && !sharePath && !publicPaths.has(event.url.pathname) && !event.locals.user ) { redirect(303, hasUsers() ? '/login' : '/setup'); } const sharePageNonce = sharePath && !shareMediaPath ? randomBytes(16).toString('base64') : null; const response = await resolve( event, sharePageNonce ? { transformPageChunk: ({ html }) => html.replaceAll('