fix(settings): le toggle autofill survit au changement de port

localStorage meurt avec l'origine a chaque lancement, donc un autofill
desactive revenait sur ON. Miroite en pref DPAPI comme unlockMode et
rememberedUsername ; la copie DPAPI fait autorite, relue dans enterApp
juste avant la poussee des combos vers Delphi.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-05 13:04:42 +01:00
parent bf9b62a541
commit fc03c90c95
2 changed files with 16 additions and 0 deletions
+5
View File
@@ -694,6 +694,11 @@ Per-user blob JSON dans `users.settings_json`, exposé via `GET/PUT
hotkeys autofill, etc. **Device-only** (localStorage seulement) :
`quickUnlockEnabled` (DPAPI lié au compte Windows), `autofillEnabled`
(toggle hotkey Win32), `rememberedUsername` (auth screen autofill local).
Ces trois-là sont **device-only mais pas localStorage-only** : chacun est
miroité en pref DPAPI, sinon le changement de port les ramène à leur défaut
à chaque lancement (`autofillEnabled` revenait ainsi sur ON une fois
désactivé). Lu dans `enterApp` juste avant `autofillPushHotkeys`, la copie
DPAPI faisant autorité.
**Piège : tout réglage lu AVANT le login doit être en pref DPAPI.**
`settings_json` demande une session, et `localStorage` est vidé à chaque
+11
View File
@@ -7013,6 +7013,14 @@ async function enterApp() {
// Fire-and-forget HIBP scan if the user opted in. Runs in background,
// re-renders when done to show badges.
if (state.hibpEnabled) hibpCheckAllEntries();
// The DPAPI copy governs — localStorage was wiped by the port change.
if (Bridge.active) {
const savedAutofill = await Bridge.getPref('autofillEnabled');
if (savedAutofill === '0' || savedAutofill === '1') {
state.autofillEnabled = savedAutofill === '1';
localStorage.setItem('autofillEnabled', savedAutofill);
}
}
// Push the user-configured hotkeys (combos + enabled state) to Delphi.
// Replaces the historical "always Ctrl+Shift+L on startup" path.
// silent: no success toast on every unlock — a clash still warns.
@@ -8090,6 +8098,9 @@ async function init() {
$('#settingAutofill').addEventListener('change', e => {
state.autofillEnabled = e.target.checked;
localStorage.setItem('autofillEnabled', state.autofillEnabled ? '1' : '0');
// Mirrored in DPAPI: localStorage dies with the origin at every port
// change, so without this the toggle came back ON at each launch.
if (Bridge.active) Bridge.setPref('autofillEnabled', state.autofillEnabled ? '1' : '0');
// Push the FULL state (toggle + combos) so Delphi register/unregister
// uses the user's current combos, not the defaults.
autofillPushHotkeys();