From 2e058a7d875cd77531d892b860acb77fd8545e14 Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #57)" Date: Fri, 3 Apr 2026 17:43:11 +0000 Subject: [PATCH] fix: add missing admin module routes (servers, players, roles, grace, audit, financials) ISSUE: Clicking on sidebar links returned 'Cannot GET /admin/servers' etc Only dashboard route existed in admin.js FIX (per Gemini consultation): Added 6 missing module routes: - /servers -> admin/servers/index.ejs - /players -> admin/players/index.ejs - /roles -> admin/roles/index.ejs - /grace -> admin/grace/index.ejs - /audit -> admin/audit/index.ejs - /financials -> admin/financials/index.ejs Each route passes required template vars: title, adminUser, csrfToken, currentPath TESTING: Click each sidebar link - should render module page Credit: Gemini consultation - identified missing routes Signed-off-by: Claude (Chronicler #57) --- services/arbiter-3.0/src/routes/admin.js | 92 ++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/services/arbiter-3.0/src/routes/admin.js b/services/arbiter-3.0/src/routes/admin.js index ece729e..44c4add 100644 --- a/services/arbiter-3.0/src/routes/admin.js +++ b/services/arbiter-3.0/src/routes/admin.js @@ -27,6 +27,98 @@ router.get('/', isAdmin, async (req, res) => { } }); +// Server Matrix Module +router.get('/servers', isAdmin, async (req, res) => { + try { + res.render('admin/servers/index', { + title: 'Server Matrix', + adminUser: req.user, + csrfToken: req.csrfToken(), + currentPath: '/servers' + }); + } catch (error) { + console.error('Server matrix error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + +// Player Management Module +router.get('/players', isAdmin, async (req, res) => { + try { + res.render('admin/players/index', { + title: 'Player Management', + adminUser: req.user, + csrfToken: req.csrfToken(), + currentPath: '/players' + }); + } catch (error) { + console.error('Player management error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + +// Role Management Module +router.get('/roles', isAdmin, async (req, res) => { + try { + const mappings = getRoleMappings(); + res.render('admin/roles/index', { + title: 'Role Management', + adminUser: req.user, + csrfToken: req.csrfToken(), + mappings: mappings, + currentPath: '/roles' + }); + } catch (error) { + console.error('Role management error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + +// Grace Period Management Module +router.get('/grace', isAdmin, async (req, res) => { + try { + res.render('admin/grace/index', { + title: 'Grace Period Management', + adminUser: req.user, + csrfToken: req.csrfToken(), + currentPath: '/grace' + }); + } catch (error) { + console.error('Grace period management error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + +// Audit Log Module +router.get('/audit', isAdmin, async (req, res) => { + try { + res.render('admin/audit/index', { + title: 'Audit Log', + adminUser: req.user, + csrfToken: req.csrfToken(), + currentPath: '/audit' + }); + } catch (error) { + console.error('Audit log error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + +// Financials Module +router.get('/financials', isAdmin, async (req, res) => { + try { + res.render('admin/financials/index', { + title: 'Financials', + adminUser: req.user, + csrfToken: req.csrfToken(), + currentPath: '/financials' + }); + } catch (error) { + console.error('Financials error:', error); + res.status(500).send('Internal Server Error: ' + error.message); + } +}); + router.post('/mappings', isAdmin, express.json(), (req, res) => { const newMappings = req.body; if (saveRoleMappings(newMappings)) {