Krystie
d230b39948
feat(totp): 4-part defense against permanent lockout
...
- credential-manager.js: add diagnose(key) method that distinguishes
ok | missing | unreadable | corrupt instead of silently returning null
- crypto-utils.js: silent fallback to .encryption-key.bak when primary
can't decrypt existing credentials; first-run bootstrap writes .bak;
rotateKey() backs up old key before swap
- routes/auth/totp.js: new public /api/v1/totp/recovery-info endpoint
returns {status, isSetUp, hint} so UI can show meaningful errors
- middleware.js: add /totp/recovery-info to PUBLIC_ROUTES so the
locked-out user can read the diagnostic without being logged in
2026-06-18 19:56:45 -07:00
..
2026-05-17 11:38:45 -07:00
2026-05-04 16:44:18 -07:00
2026-05-17 11:38:45 -07:00
2026-06-18 18:52:48 -07:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-03-23 16:50:24 -07:00
2026-06-18 19:56:45 -07:00
2026-06-18 19:23:30 -07:00
2026-06-18 19:23:30 -07:00
2026-06-18 18:52:48 -07:00
2026-03-05 02:26:12 -08:00
2026-03-29 22:35:13 -07:00
2026-05-05 17:52:05 -07:00
2026-04-06 21:36:46 -07:00
2026-03-23 13:39:05 -07:00
2026-03-05 02:26:12 -08:00
2026-03-29 22:35:13 -07:00
2026-03-29 22:35:13 -07:00
2026-06-18 18:52:48 -07:00
2026-05-17 11:38:45 -07:00
2026-03-23 10:47:15 +01:00
2026-05-28 15:14:59 -07:00
2026-05-27 23:39:46 -07:00
2026-03-23 10:47:15 +01:00
2026-05-04 16:44:18 -07:00
2026-03-30 03:23:59 -07:00
2026-03-31 23:26:30 -07:00
2026-06-18 19:56:45 -07:00
2026-06-18 19:56:45 -07:00
2026-05-23 16:15:56 -07:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-05-12 18:20:59 -07:00
2026-03-29 18:46:02 -07:00
2026-03-28 19:01:24 -07:00
2026-03-29 18:46:02 -07:00
2026-03-05 02:26:12 -08:00
2026-06-18 19:23:30 -07:00
2026-05-04 16:44:18 -07:00
2026-05-04 16:36:09 -07:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-03-23 14:17:25 -07:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-06-18 19:56:45 -07:00
2026-05-27 23:39:46 -07:00
2026-05-17 11:38:45 -07:00
2026-04-05 16:15:14 -07:00
2026-06-18 19:23:30 -07:00
2026-03-05 02:26:12 -08:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-05-27 23:39:46 -07:00
2026-04-01 02:00:05 -07:00
2026-05-17 01:29:07 -07:00
2026-05-27 23:39:46 -07:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-03-23 10:47:15 +01:00
2026-05-27 23:39:46 -07:00
2026-03-14 23:01:20 -07:00
2026-06-18 19:23:30 -07:00