mirror of https://github.com/wg-easy/wg-easy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1019 B
36 lines
1019 B
export default defineEventHandler(async (event) => {
|
|
// TODO: improve, wrapper or smth
|
|
const url = getRequestURL(event);
|
|
const session = await useWGSession(event);
|
|
|
|
// Api handled by session, Setup handled with setup middleware
|
|
if (url.pathname.startsWith('/api/') || url.pathname.startsWith('/setup')) {
|
|
return;
|
|
}
|
|
|
|
if (url.pathname === '/login') {
|
|
if (session.data.userId) {
|
|
return sendRedirect(event, '/', 302);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Require auth for every page other than Login
|
|
// TODO: investigate /__nuxt_error (error page when unauthenticated)
|
|
if (!session.data.userId) {
|
|
return sendRedirect(event, '/login', 302);
|
|
}
|
|
|
|
if (url.pathname.startsWith('/admin')) {
|
|
const user = await Database.users.get(session.data.userId);
|
|
if (!user) {
|
|
return sendRedirect(event, '/login', 302);
|
|
}
|
|
if (user.role !== roles.ADMIN) {
|
|
throw createError({
|
|
statusCode: 403,
|
|
statusMessage: 'Not allowed to access Admin Panel',
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|