36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
const config = require('../config');
|
|
const database = require('../database');
|
|
|
|
// Middleware to check authentication via signed cookie
|
|
async function requireAuth(req, reply) {
|
|
const raw = req.cookies && req.cookies.kitchen_session;
|
|
if (!raw) { reply.redirect('/login'); return; }
|
|
const { valid, value } = req.unsignCookie(raw || '');
|
|
if (!valid) { reply.redirect('/login'); return; }
|
|
const token = config.get('authToken');
|
|
const expiry = config.get('tokenExpiry');
|
|
const apiClient = require('../api-client');
|
|
if (!token || apiClient.isTokenExpired(expiry) || value !== token) {
|
|
reply.redirect('/login');
|
|
return;
|
|
}
|
|
}
|
|
|
|
async function dashboardRoutes(fastify, options) {
|
|
|
|
// Dashboard page
|
|
fastify.get('/dashboard', { preHandler: requireAuth }, async (req, reply) => {
|
|
const appConfig = config.getAll();
|
|
const stats = database.getOrderStats();
|
|
|
|
return reply.view('dashboard', {
|
|
config: appConfig,
|
|
stats: stats,
|
|
showStats: appConfig.showOrderStats !== 'false'
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = dashboardRoutes;
|
|
|