import { Router } from 'express'; import * as authController from '../controllers/auth.controller.js'; import { authenticate, requirePermission } from '../middleware/auth.js'; import { loginRateLimiter, passwordResetRateLimiter } from '../middleware/rateLimit.js'; const router = Router(); // loginRateLimiter sperrt pro (IP + Email)-Tuple. Damit kann sich // `nina` von derselben IP einloggen, auch wenn `max` dort gerade // 10x vergeigt hat – und umgekehrt darf `max` von einer anderen IP // auch dann noch versuchen, wenn IP-A gerade sein Bucket verbrannt // hat (Pentest 2026-05-18 Szenario). router.post('/login', loginRateLimiter, authController.login); router.post('/customer-login', loginRateLimiter, authController.customerLogin); router.post('/refresh', authController.refresh); router.get('/me', authenticate, authController.me); router.post('/logout', authenticate, authController.logout); router.post('/register', authenticate, requirePermission('users:create'), authController.register); // Passwort-Reset-Flow router.post('/password-reset/request', passwordResetRateLimiter, authController.requestPasswordReset); router.post('/password-reset/confirm', passwordResetRateLimiter, authController.confirmPasswordReset); // Force-Change-Password nach Einmalpasswort-Login (Kundenportal) router.post('/change-initial-portal-password', authenticate, authController.changeInitialPortalPassword); // Kurzlebiger Download-Token (60s) für ?token=-Aufrufe (PDF/Export-Window) router.post('/download-token', authenticate, authController.createDownloadToken); export default router;