mailcow/data
Stephen Ritz 4cba448671 [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>
2026-07-14 15:11:17 -07:00
..
assets Merge pull request #6223 from mailcow/ffdhe2048 2025-02-12 10:48:22 +01:00
conf [Postfix] change postscreen blacklist_action to denylist_action 2026-07-13 08:45:56 +02:00
Dockerfiles Merge pull request #7312 from mailcow/renovate/composer-composer-2.x 2026-07-13 09:40:58 +02:00
hooks
web [Web] translate password errors in the forced password change modal 2026-07-14 15:11:17 -07:00