Marc-André Bombeck
9269043e91
feat(security): list active sessions, sign out everywhere, and show security activity
...
Add the user-facing account-security surface in Settings:
- Active sessions (closes #64 ): GET /api/auth/me/sessions lists each browser
login with a coarse device label, masked IP, resolved location, the sliding
last-active stamp, and the current-session marker. DELETE the collection
signs out everywhere else (keeps the current session, revokes other sessions
and native refresh tokens, leaves API tokens alone); DELETE one revokes a
single session, scoped to the owner so a foreign id 404s.
- A sliding last-active stamp on the session, written throttled and
fire-and-forget off the request-resolution path.
- Security activity: GET /api/auth/me/security-activity, the shared read over
the audit log filtered to sign-ins, second-factor changes, password changes,
session revocations, exports, and deletions, with masked IPs.
OpenAPI regenerated for the new endpoints.
2026-06-27 20:34:43 +02:00
..
2026-05-10 10:34:32 +02:00
2026-05-09 21:00:23 +02:00
2026-05-09 20:46:20 +02:00
2026-05-09 20:58:33 +02:00
2026-05-09 20:50:08 +02:00
2026-05-09 18:08:11 +02:00
2026-06-19 22:20:31 +02:00
2026-05-10 11:05:40 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-14 14:26:58 +02:00
2026-06-08 20:09:17 +02:00
2026-05-16 19:46:43 +02:00
2026-05-14 23:49:32 +02:00
2026-05-24 22:22:30 +02:00
2026-05-10 22:30:53 +02:00
2026-06-19 22:20:31 +02:00
2026-06-14 14:26:58 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-05-10 01:25:57 +02:00
2026-05-10 11:05:40 +02:00
2026-06-19 22:20:31 +02:00
2026-06-26 14:17:36 +02:00
2026-05-10 16:11:12 +02:00
2026-05-11 02:38:17 +02:00
2026-05-14 23:49:32 +02:00
2026-06-01 19:54:26 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-05-11 08:27:51 +02:00
2026-06-19 22:20:31 +02:00
2026-05-16 12:37:55 +02:00
2026-05-10 00:11:36 +02:00
2026-06-22 09:00:39 +02:00
2026-06-22 09:00:39 +02:00
2026-05-08 17:46:31 +02:00
2026-05-09 18:08:11 +02:00
2026-06-19 22:20:31 +02:00
2026-05-10 01:30:06 +02:00
2026-05-10 11:05:40 +02:00
2026-06-21 12:55:13 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-11 02:19:28 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-05-16 10:59:42 +02:00
2026-05-31 14:36:17 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-02 16:45:23 +02:00
2026-06-19 22:20:31 +02:00
2026-06-10 11:18:00 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-27 19:56:30 +02:00
2026-05-09 18:08:11 +02:00
2026-06-14 11:31:52 +02:00
2026-06-05 03:45:04 +02:00
2026-06-27 19:33:10 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-06-27 19:33:10 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-05-14 23:49:32 +02:00
2026-05-08 17:46:31 +02:00
2026-06-26 13:24:30 +02:00
2026-06-19 22:20:31 +02:00
2026-06-27 20:34:43 +02:00
2026-05-21 23:13:21 +02:00
2026-06-27 19:33:10 +02:00
2026-06-04 10:05:47 +02:00
2026-05-24 22:22:30 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00
2026-05-14 23:49:32 +02:00
2026-06-19 22:20:31 +02:00
2026-06-05 08:10:13 +02:00
2026-05-17 15:36:38 +02:00
2026-06-19 22:20:31 +02:00
2026-05-24 22:22:30 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-06-19 22:20:31 +02:00
2026-06-19 22:20:31 +02:00