Release v2.5.6

This commit is contained in:
2026-08-05 19:38:16 +01:00
parent a8ef35b287
commit 9f831f04bc
161 changed files with 8487 additions and 1295 deletions
+18 -5
View File
@@ -1,5 +1,7 @@
// Authentication route registration for the web app.
const { normalizeReturnToPath, getRequestOrigin } = require('../../lib/auth/session');
module.exports = function registerAuthRoutes(app, deps) {
const pool = deps.pool;
const pages = deps.pages;
@@ -13,19 +15,28 @@ module.exports = function registerAuthRoutes(app, deps) {
const verifyPassword = deps.verifyPassword;
const sessionCookieName = deps.sessionCookieName;
function getReturnTo(req) {
return normalizeReturnToPath(req && (req.query && req.query.returnTo || req.body && req.body.returnTo), getRequestOrigin(req));
}
function buildLoginRedirect(returnTo) {
return returnTo ? '/login?returnTo=' + encodeURIComponent(returnTo) : '/login';
}
app.get('/', function (req, res) {
res.redirect(req.currentUser ? '/dashboard' : '/login');
});
app.get('/login', function (req, res) {
const returnTo = getReturnTo(req);
if (req.currentUser) {
return res.redirect('/dashboard');
return res.redirect(returnTo || '/dashboard');
}
const message = typeof consumeAuthMessageCookie === 'function'
? consumeAuthMessageCookie(req, res)
: (req.query.message ? String(req.query.message) : '');
res.send(pages.renderLoginPage(message));
res.send(pages.renderLoginPage(message, returnTo));
});
app.post('/login', async function (req, res, next) {
@@ -39,17 +50,19 @@ module.exports = function registerAuthRoutes(app, deps) {
const [rows] = await pool.query('SELECT id, name, username, password_hash, password_salt, password_iterations FROM a_users WHERE username = ? LIMIT 1', [username]);
const user = rows[0] || null;
if (!user || !verifyPassword(password, user)) {
const returnTo = getReturnTo(req);
if (typeof setAuthMessageCookie === 'function') {
setAuthMessageCookie(res, 'Invalid username or password.');
return res.redirect('/login');
return res.redirect(buildLoginRedirect(returnTo));
}
return res.status(401).send(pages.renderLoginPage('Invalid username or password.'));
return res.status(401).send(pages.renderLoginPage('Invalid username or password.', returnTo));
}
const returnTo = getReturnTo(req);
const token = await createUserSession(pool, user.id);
setSessionCookie(res, token);
res.redirect('/dashboard');
res.redirect(returnTo || '/dashboard');
} catch (error) {
next(error);
}
+2 -1
View File
@@ -2,12 +2,13 @@
const { renderView } = require('../../view');
module.exports = function renderLoginPage(message) {
module.exports = function renderLoginPage(message, returnTo) {
return renderView('auth/login', {
title: 'Sign in',
authShell: true,
bodyClass: 'login-page-body',
message: message || '',
returnTo: returnTo || '',
messageVariant: 'warning'
});
};