From 89bc27aef0c05e4adef9005fffab411760eed297 Mon Sep 17 00:00:00 2001 From: Glenn de Haan Date: Wed, 21 Aug 2024 21:05:31 +0200 Subject: [PATCH] Fixed missing x-ingress-path within authorization.js redirects. Implemented local/development .options.json config --- .dockerignore | 3 +++ .gitignore | 3 +++ middlewares/authorization.js | 6 +++--- modules/config.js | 8 +++++++- server.js | 3 +++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.dockerignore b/.dockerignore index 46223d7..d71cde6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -12,6 +12,9 @@ npm-debug.log # Build files public/dist/ +# Local config +.options.json + # Project files .github .editorconfig diff --git a/.gitignore b/.gitignore index 6fc0670..f2b73e1 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ npm-debug.log # Build files public/dist/ + +# Local config +.options.json diff --git a/middlewares/authorization.js b/middlewares/authorization.js index 7bdb3b2..f6474a1 100644 --- a/middlewares/authorization.js +++ b/middlewares/authorization.js @@ -27,7 +27,7 @@ module.exports = { if(!authDisabled) { // Check if user has an existing authorization cookie if (!req.cookies.authorization) { - res.redirect(302, '/login'); + res.redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/login`); return; } @@ -36,10 +36,10 @@ module.exports = { const check = jwt.verify(req.cookies.authorization); if(!check) { - res.cookie('flashMessage', JSON.stringify({type: 'error', message: 'Invalid or expired login!'}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, '/login'); + res.cookie('flashMessage', JSON.stringify({type: 'error', message: 'Invalid or expired login!'}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/login`); } } catch (e) { - res.cookie('flashMessage', JSON.stringify({type: 'error', message: 'Invalid or expired login!'}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, '/login'); + res.cookie('flashMessage', JSON.stringify({type: 'error', message: 'Invalid or expired login!'}), {httpOnly: true, expires: new Date(Date.now() + 24 * 60 * 60 * 1000)}).redirect(302, `${req.headers['x-ingress-path'] ? req.headers['x-ingress-path'] : ''}/login`); return; } } diff --git a/modules/config.js b/modules/config.js index b88e623..7adf02e 100644 --- a/modules/config.js +++ b/modules/config.js @@ -4,14 +4,20 @@ const fs = require('fs'); /** - * Get an option from external config (Home Assistant) + * Get an option from external config (Home Assistant / Local Development) * * @param option */ module.exports = (option) => { + // Check if Home Assistant config exists if (fs.existsSync('/data/options.json')) { return JSON.parse(fs.readFileSync('/data/options.json', 'utf-8'))[option]; } + // Check if Local (Development) config exists + if (fs.existsSync(`${__dirname}/../.options.json`)) { + return JSON.parse(fs.readFileSync(`${__dirname}/../.options.json`, 'utf-8'))[option]; + } + return null; }; diff --git a/server.js b/server.js index 79734b9..76595ad 100644 --- a/server.js +++ b/server.js @@ -70,6 +70,9 @@ if(fs.existsSync('/etc/unifi_voucher_site_build')) { if (fs.existsSync('/data/options.json')) { log.info('[Options] Found at /data/options.json'); } +if (fs.existsSync(`${__dirname}/.options.json`)) { + log.info(`[Options] Found at ${__dirname}/.options.json`); +} /** * Log service status