29 lines
782 B
TypeScript
29 lines
782 B
TypeScript
import { defineMiddleware } from 'astro:middleware';
|
|
|
|
const STATIC_PATHS = ['/_astro/', '/favicon.svg', '/favicon.ico'];
|
|
const AUTH_BYPASS_PATHS = ['/gated-404'];
|
|
|
|
export const onRequest = defineMiddleware(async (context, next) => {
|
|
const { request, url } = context;
|
|
|
|
// Bypass auth for static assets
|
|
if (STATIC_PATHS.some((p) => url.pathname.startsWith(p))) {
|
|
return next();
|
|
}
|
|
|
|
// Bypass auth for gated pages to prevent redirect loops
|
|
if (AUTH_BYPASS_PATHS.includes(url.pathname)) {
|
|
return next();
|
|
}
|
|
|
|
// Simple presence check for fa_session cookie
|
|
const cookieHeader = request.headers.get('cookie') || '';
|
|
const hasSession = /fa_session=[^;]+/.test(cookieHeader);
|
|
|
|
if (hasSession) {
|
|
return next();
|
|
}
|
|
|
|
return context.rewrite('/gated-404');
|
|
});
|