29 lines
877 B
TypeScript
29 lines
877 B
TypeScript
import { defineMiddleware } from 'astro:middleware';
|
|
import { ADMIN_COOKIE, verifySession } from './lib/auth';
|
|
|
|
export const onRequest = defineMiddleware(async (context, next) => {
|
|
const { pathname } = context.url;
|
|
|
|
const isAdminPage = pathname.startsWith('/admin') && pathname !== '/admin/login';
|
|
const isAdminApi =
|
|
pathname.startsWith('/api/content') ||
|
|
pathname.startsWith('/api/upload') ||
|
|
pathname === '/api/auth/logout';
|
|
|
|
if (isAdminPage || isAdminApi) {
|
|
const token = context.cookies.get(ADMIN_COOKIE)?.value;
|
|
const ok = await verifySession(token);
|
|
if (!ok) {
|
|
if (isAdminApi) {
|
|
return new Response(JSON.stringify({ error: 'unauthorized' }), {
|
|
status: 401,
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
}
|
|
return context.redirect('/admin/login');
|
|
}
|
|
}
|
|
|
|
return next();
|
|
});
|