Release v2.17.0: add read-only user previews and access fallbacks
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m47s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 32s

This commit is contained in:
lzstealth committed 2026-10-23 01:55:33 +01:00
1 parent 11dd801f6d
commit 9c28eca3ef
52 files changed
+1624 -140

No files matched your search

+27 -3
View File
@@ -28,6 +28,18 @@ module.exports = function registerAccountRoutes(app, deps) {
return buildPasswordRequirements(settings);
}
function isPasswordChangeRequired(req) {
return Boolean(req && (req.authenticatedUser && req.authenticatedUser.mustChangePassword || req.currentUser && req.currentUser.mustChangePassword));
}
async function sendPasswordError(req, res, message) {
if (!isPasswordChangeRequired(req)) {
return res.status(400).send(message);
}
const requirements = await getPasswordRequirements();
return res.status(400).send(pages.renderRequiredPasswordPage(req.currentUser, requirements, message));
}
function buildPasswordRequirements(settings) {
return {
minimumLength: settings['security.password_min_length'],
@@ -102,6 +114,18 @@ module.exports = function registerAccountRoutes(app, deps) {
});
});
app.get('/account/password', async function (req, res, next) {
if (!isPasswordChangeRequired(req)) {
return res.redirect('/account');
}
try {
const requirements = await getPasswordRequirements();
res.send(pages.renderRequiredPasswordPage(req.currentUser, requirements));
} catch (error) {
next(error);
}
});
app.post('/account/profile', async function (req, res, next) {
try {
const name = String(req.body.name || '').trim();
@@ -268,14 +292,14 @@ module.exports = function registerAccountRoutes(app, deps) {
return res.status(404).send('User not found.');
}
if (!verifyPassword(currentPassword, user)) {
return res.status(400).send('Current password is incorrect.');
return sendPasswordError(req, res, 'Current password is incorrect.');
}
const passwordStrengthMessage = validatePasswordStrength(newPassword, await getPasswordRequirements());
if (passwordStrengthMessage) {
return res.status(400).send(passwordStrengthMessage);
return sendPasswordError(req, res, passwordStrengthMessage);
}
if (newPassword !== confirmPassword) {
return res.status(400).send('New passwords do not match.');
return sendPasswordError(req, res, 'New passwords do not match.');
}
const passwordRecord = hashPassword(newPassword);