Hermes
8a6aed546d
[grade=A urn:ump:5bm325dgncwgwsl2joztkf4br3wh5lh6jam3rn32fvyr62zyoysa] fix(auth): machine credentials (dk_ keys, JWTs) dead under TOTP — audit P0-1
...
With TOTP enabled, totpAuthMiddleware answered 401 before
jwtApiKeyAuthMiddleware ever ran: API keys and JWTs were rejected on
every TOTP-protected install (live-verified during the 2026-10-27
sweep with a freshly minted dk_ key getting 401 on /api/v1/mcp/info).
MCP-over-HTTP ('Connect your AI'), fleet endpoints and every machine
integration were broken in production.
Fix: the TOTP gate now verifies Bearer JWT then x-api-key itself
(try/catch, fall-through to the unchanged 401) and sets req.auth;
the JWT/API-key gate passes through on already-set machine auth
(no double verification). Session/public/TOTP-disabled paths
byte-identical.
New chain-level test (no req.auth injection — the gap that hid this
bug) boots the real configureMiddleware chain; VERIFIED it fails 2/5
with the fix stashed and passes 5/5 with it. Judge polish (call-count
assertion) noted as optional follow-up.
Full suite: 172/172 suites, 3731/3731 tests.
2026-10-28 00:35:20 -07:00
..
2026-08-23 20:24:42 -07:00
2026-10-28 00:34:14 -07:00
2026-10-09 02:56:41 -07:00
2026-06-13 12:16:56 -07:00
2026-10-28 00:04:01 -07:00
2026-10-28 00:35:20 -07:00
2026-08-12 12:25:26 -07:00
2026-10-27 23:49:40 -07:00
2026-10-08 23:25:41 -07:00
2026-06-26 12:16:38 -07:00
2026-10-07 20:44:07 -07:00
2026-08-18 08:22:29 -07:00
2026-08-22 16:22:53 -07:00
2026-07-01 07:37:45 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 01:57:20 -07:00
2026-08-23 09:05:27 -07:00
2026-08-23 08:01:29 -07:00
2026-07-01 04:20:57 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-07-20 01:40:33 -07:00
2026-07-02 18:27:03 -07:00
2026-08-18 05:52:32 -07:00
2026-06-27 07:02:47 -07:00
2026-08-22 19:42:25 -07:00
2026-08-23 02:31:16 -07:00
2026-08-23 12:40:32 -07:00
2026-08-23 12:40:32 -07:00
2026-08-23 15:53:58 -07:00
2026-10-07 00:58:03 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 12:35:58 -07:00
2026-08-22 17:22:13 -07:00
2026-08-23 04:40:41 -07:00
2026-06-13 12:16:56 -07:00
2026-08-18 04:17:50 -07:00
2026-10-09 02:56:41 -07:00
2026-06-26 12:16:38 -07:00
2026-08-17 16:04:18 -07:00
2026-06-13 12:16:56 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 04:50:16 -07:00
2026-08-12 12:30:57 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 15:02:00 -07:00
2026-08-22 14:23:25 -07:00
2026-08-22 16:52:53 -07:00
2026-08-22 16:52:53 -07:00
2026-08-22 15:14:25 -07:00
2026-08-22 15:14:25 -07:00
2026-08-13 16:30:20 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-04-06 21:36:46 -07:00
2026-08-04 14:18:49 -07:00
2026-08-22 18:15:37 -07:00
2026-08-22 18:15:37 -07:00
2026-08-22 18:15:37 -07:00
2026-07-20 21:40:26 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 07:28:10 -07:00
2026-08-23 05:22:04 -07:00
2026-06-25 17:16:16 -07:00
2026-08-12 12:35:58 -07:00
2026-08-18 01:29:19 -07:00
2026-08-22 21:35:51 -07:00
2026-08-18 17:07:13 -07:00
2026-10-03 21:12:35 -07:00
2026-10-03 21:12:35 -07:00
2026-10-03 21:26:29 -07:00
2026-10-03 21:26:29 -07:00
2026-10-03 21:43:11 -07:00
2026-10-03 23:25:23 -07:00
2026-10-03 21:37:13 -07:00
2026-10-03 21:31:57 -07:00
2026-07-06 15:06:28 -07:00
2026-10-03 21:29:41 -07:00
2026-10-03 21:29:41 -07:00
2026-10-04 03:12:23 -07:00
2026-10-03 21:14:20 -07:00
2026-10-03 22:55:22 -07:00
2026-10-03 22:34:02 -07:00
2026-10-03 21:16:20 -07:00
2026-10-03 21:37:13 -07:00
2026-10-03 22:47:27 -07:00
2026-10-03 21:39:33 -07:00
2026-10-03 21:35:15 -07:00
2026-10-03 21:40:09 -07:00
2026-10-03 21:47:34 -07:00
2026-08-22 23:28:36 -07:00
2026-08-22 19:42:25 -07:00
2026-08-22 23:28:36 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 05:07:24 -07:00
2026-06-13 12:16:56 -07:00
2026-07-21 21:59:03 -07:00
2026-10-09 02:56:41 -07:00
2026-08-23 07:28:10 -07:00
2026-06-13 12:16:56 -07:00
2026-09-13 05:32:14 -07:00
2026-07-24 22:39:29 -07:00
2026-08-22 05:41:38 -07:00
2026-08-19 00:10:37 -07:00
2026-08-19 00:10:37 -07:00
2026-07-21 00:45:46 -07:00
2026-10-07 00:58:03 -07:00
2026-06-13 12:16:56 -07:00
2026-08-22 05:41:38 -07:00
2026-06-13 12:16:56 -07:00
2026-07-06 21:28:03 -07:00
2026-07-06 18:55:16 -07:00
2026-08-18 19:45:08 -07:00
2026-08-18 17:35:59 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-08-18 13:16:44 -07:00
2026-08-18 13:34:51 -07:00
2026-08-31 23:37:00 -07:00
2026-08-18 01:59:14 -07:00
2026-08-18 09:03:58 -07:00
2026-08-15 00:01:16 -07:00