import { Router } from 'express'; import { authenticate, requirePermission } from '../middleware/auth.js'; import * as auditLogController from '../controllers/auditLog.controller.js'; const router = Router(); // Alle Routen erfordern Authentifizierung router.use(authenticate); // ACHTUNG Reihenfolge: Alle konkreten Pfade MÜSSEN vor der Parameter-Route // '/:id' stehen, sonst schluckt diese sie und antwortet mit // "Ungültige Audit-Log-ID". Genau so war GET /retention-policies unerreichbar // (Pentest R166-04). // Audit-Logs abrufen router.get('/', requirePermission('audit:read'), auditLogController.getAuditLogs); // Audit-Logs exportieren // // Verlangt `audit:export`, nicht `audit:read`. Die Berechtigung stand im // Katalog und in der Rollenverwaltung, gatete aber NICHTS - jeder Leser // konnte das vollstaendige Protokoll in einem Zug herausziehen. // // Das ist etwas anderes als Blaettern: Der Export liefert `changesBefore` und // `changesAfter`, also die vollstaendigen Vorher/Nachher-Datensaetze, dazu // `resourceLabel` mit Klartextnamen, IP-Adressen und User-Agents. Aufgefallen // am Dienstkonto des Gegenbuchs: Es soll ausschliesslich Pruefwerte lesen - // und konnte Personendaten exportieren. router.get('/export', requirePermission('audit:export'), auditLogController.exportAuditLogs); // Retention-Policies router.get('/retention-policies', requirePermission('audit:admin'), auditLogController.getRetentionPolicies); router.put('/retention-policies/:id', requirePermission('audit:admin'), auditLogController.updateRetentionPolicy); // Kontrollwert für das externe Gegenbuch (nur lesend, ohne Geheimnisse) router.get('/checkpoint', requirePermission('audit:read'), auditLogController.getCheckpoint); // Audit-Logs für einen Kunden (DSGVO) router.get('/customer/:customerId', requirePermission('audit:read'), auditLogController.getAuditLogsByCustomer); // Hash-Ketten-Integrität prüfen router.post('/verify', requirePermission('audit:read'), auditLogController.verifyIntegrity); // Hash-Kette reparieren router.post('/rehash', requirePermission('audit:admin'), auditLogController.rehashAll); // Altbestand versiegeln (nicht destruktiv) router.post('/seal-backlog', requirePermission('audit:admin'), auditLogController.sealBacklog); // Retention-Cleanup manuell ausführen router.post('/cleanup', requirePermission('audit:admin'), auditLogController.runRetentionCleanup); // Einzelnes Audit-Log abrufen – als LETZTE GET-Route, siehe Hinweis oben router.get('/:id', requirePermission('audit:read'), auditLogController.getAuditLogById); export default router;