A self-hosted orchestration system crafted for power users. composia.xyz
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import type { Handle } from "@sveltejs/kit";
import { redirect } from "@sveltejs/kit";
import { readSessionToken, sessionCookie } from "$lib/server/session";
import { jsonApiError } from "$lib/server/controller-route";import { loginRequestBodySizeStatus, sanitizeLoginRedirect,} from "$lib/server/login";import { withRequestSignal } from "$lib/server/request-context";import { normalizeLocale } from "$lib/i18n/locales";import { isDocumentRequest } from "$lib/server/request";
const publicRoutes = new Set(["/login"]);
export const handle: Handle = async ({ event, resolve }) => { const oversizedLoginStatus = loginRequestBodySizeStatus(event.request); if (oversizedLoginStatus) { return new Response(null, { status: oversizedLoginStatus }); }
const locale = normalizeLocale(event.cookies.get("composia.locale")); const user = readSessionToken(event.cookies.get(sessionCookie())); event.locals.user = user;
const pathname = event.url.pathname; const isPublicRoute = isPublicPath(pathname); if (!user && !isPublicRoute) { if (isDocumentRequest(event.request)) { throw redirect( 303, `/login?next=${encodeURIComponent(pathname + event.url.search)}`, ); } return jsonApiError("AUTHENTICATION_REQUIRED", 401); }
if (user && pathname === "/login") { throw redirect( 303, sanitizeLoginRedirect(event.url.searchParams.get("next")), ); }
return withRequestSignal(event.request.signal, () => resolve(event, { transformPageChunk: ({ html }) => html.replace('<html lang="en"', `<html lang="${locale}"`), }), );};
function isPublicPath(pathname: string) { if (publicRoutes.has(pathname)) { return true; } return pathname.startsWith("/favicon") || pathname.startsWith("/manifest");}