mirror of
https://github.com/mailcow/mailcow-dockerized.git
synced 2026-08-18 13:03:17 +00:00
[Web] translate password errors in the forced password change modal
The forced password change modal posts to the JSON API and renders data[0].msg directly. The API returns raw language keys rather than translated strings, so a user who fails the complexity policy is shown the literal text "password_complexity" instead of a message. Every other password form renders errors through alertbox_log_parser(), which resolves the key against $lang. The modal is the only one that talks to the API directly, and it never resolved the key. Resolve it against lang_danger, which base.twig already exposes for this purpose. This also covers password_mismatch, password_empty and access_denied, and applies to the admin path as well. Unknown keys still fall through unchanged. The lookup is guarded with hasOwnProperty because msg is attacker- independent but dynamic: a bare lang_danger[msg] would resolve inherited Object.prototype members such as "constructor" to a function, which jQuery's .text() would then invoke as a callback. Language files are untouched: prerequisites.inc.php loads lang.en-gb.json as the base and merges the active locale over it, so locales that lack the key inherit the English string. Fixes #7301 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c1d75cf808
commit
4cba448671
@@ -473,6 +473,10 @@ function recursiveBase64StrToArrayBuffer(obj) {
|
||||
window.location.reload();
|
||||
} else {
|
||||
var msg = (data && data[0] && data[0].msg) ? data[0].msg : 'Password change failed.';
|
||||
// the API returns raw language keys, resolve them like the alert box does
|
||||
if (Object.prototype.hasOwnProperty.call(lang_danger, msg)) {
|
||||
msg = lang_danger[msg];
|
||||
}
|
||||
$('#changePWAlert').show().text(msg);
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user