mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-05 06:59:42 +02:00
- routes/admin-routes.ts: GET/POST /api/admin/users, PATCH/DELETE /api/admin/users/:username, reset-password, logout. Multi-user only (404 otherwise), requireAdmin, last-admin invariants, one-time-password on create / reset (returned once + mustChangePassword), disable/reset/delete revoke cookie sessions, delete kills the user's live sessions first (normal teardown) and can delete their space (guarded). Per-user stats (live/active sessions, case count). - web/admin-audit.ts: append-only ~/.codeman/admin-audit.jsonl (timestamp, acting admin, action, target, IP) for every user-management action. - SSE admin:usersChanged + auth:passwordChangeRequired (sse-events.ts + constants.js). fix(user-store): serialize users.json read-modify-write touchLastLogin fires on every Basic auth (fire-and-forget) and was racing route writes (create/update), clobbering records — a real corruption bug surfaced by the admin tests. All mutators now run under a single write lock, and touchLastLogin is throttled to once/minute per user to bound disk churn. Tests: test/admin-routes.test.ts (8, live server) + user-store lock verified by the existing user-store suite. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
/**
|
|
* @fileoverview Barrel export for all route modules.
|
|
*/
|
|
|
|
export { registerPushRoutes } from './push-routes.js';
|
|
export { registerTeamRoutes } from './team-routes.js';
|
|
export { registerMuxRoutes } from './mux-routes.js';
|
|
export { registerFileRoutes } from './file-routes.js';
|
|
export { registerScheduledRoutes } from './scheduled-routes.js';
|
|
export { registerCronRoutes } from './cron-routes.js';
|
|
export { registerSystemRoutes } from './system-routes.js';
|
|
export { registerHookEventRoutes } from './hook-event-routes.js';
|
|
export { registerStatusTelemetryRoutes } from './status-telemetry-routes.js';
|
|
export { registerCaseRoutes } from './case-routes.js';
|
|
export { registerSessionRoutes } from './session-routes.js';
|
|
export { registerRespawnRoutes } from './respawn-routes.js';
|
|
export { registerRalphRoutes } from './ralph-routes.js';
|
|
export { registerPlanRoutes } from './plan-routes.js';
|
|
export { registerOrchestratorRoutes } from './orchestrator-routes.js';
|
|
export { registerClipboardRoutes } from './clipboard-routes.js';
|
|
export { registerSearchRoutes } from './search-routes.js';
|
|
export { registerMeRoutes } from './me-routes.js';
|
|
export { registerAdminRoutes } from './admin-routes.js';
|
|
export { registerWsRoutes } from './ws-routes.js';
|