import type { Handle } from '@sveltejs/kit'; import { eq } from 'drizzle-orm'; import { locale } from 'svelte-i18n'; import * as auth from '$lib/server/auth'; import { db } from '$lib/server/db'; import { permissions } from '$lib/server/db/schema/permissions'; import { roles } from '$lib/server/db/schema/roles'; import { usersToPermissions, usersToRoles } from '$lib/server/db/schema/schema'; const handleAuth: Handle = async ({ event, resolve }) => { const sessionToken = event.cookies.get(auth.sessionCookieName); if (!sessionToken) { event.locals.user = null; event.locals.session = null; return resolve(event); } const result = await auth.validateSessionToken(sessionToken); if (!result || !result.session || !result.user) { auth.deleteSessionTokenCookie(event.cookies); event.locals.user = null; event.locals.session = null; return resolve(event); } const { session, user } = result; if (session) { auth.setSessionTokenCookie(event, sessionToken, session.expires_at); } event.locals.user = user; event.locals.session = session; const result2 = await db .select() .from(permissions) .innerJoin( usersToPermissions, eq(usersToPermissions.permission_id, permissions.id) ) .where(eq(usersToPermissions.user_id, user.id)); event.locals.permissions = result2.map((result) => { return result.permission; }); const result3 = await db .select() .from(roles) .innerJoin(usersToRoles, eq(usersToRoles.role_id, roles.id)) .where(eq(usersToRoles.user_id, user.id)); event.locals.roles = result3.map((result) => { return result.role; }); const lang = event.request.headers.get('accept-language')?.split(',')[0]; if (lang) { locale.set(lang); } return resolve(event); }; export const handle: Handle = handleAuth;