feat: FZA Einzelstunden + Security-Fixes (K-1–K-5, H-2–H-4, M-1/M-3/M-6)
FZA Einzelstunden:
- Absence.fza_hours (Numeric 5,2) — FZA in Stunden statt Tagen
- Migration 0032: fza_hours Spalte in absences
- AbsenceCreate/AbsenceOut Schema um fza_hours erweitert
- absence_service: _deduct/_refund_overtime nutzt fza_hours direkt wenn gesetzt
- Frontend: Tage/Stunden-Toggle im FZA-Antrag-Modal
Security K-1: Privilege Escalation via PATCH /users/{id}.role
- user_service: Whitelist für Rollenänderungen, SUPER_ADMIN nur durch SUPER_ADMIN
- Letzter COMPANY_ADMIN gegen Selbst-Demotion gesichert
Security K-2: Kiosk-IP-Whitelist hinter nginx
- kiosk_security: _get_client_ip() liest X-Real-IP statt request.client.host
Security K-3: Kiosk-PIN Brute-Force-Schutz
- kiosk_auth_service: Redis-Lockout nach 5 Fehlversuchen (15 min)
Security K-4: TOTP-Setup-Hijacking
- auth router: /totp/setup abgelehnt wenn TOTP bereits aktiv
Security K-5: Separater Fernet-Key
- config: SECRET_KEY_DATA Feld (optional, Fallback auf SECRET_KEY)
- crypto: get_fernet_key() mit Warning bei fehlendem SECRET_KEY_DATA
Security H-2: Vacation Balance nur HR/Admin
- absences router: PATCH /balance nur noch HR/COMPANY_ADMIN/SUPER_ADMIN + AuditLog
Security H-3: Rate-Limits auf /auth/refresh + /auth/logout
- auth router: 30/min auf refresh, 60/min auf logout
Security H-4: Login-Failure-Logging + Lockout
- auth_service: Redis-Counter, Lockout nach 10 Versuchen (15 min)
- AuditLog für login_success und login_failed
Security M-1: Nginx Security-Header
- nginx.conf: X-Frame-Options, X-Content-Type-Options, CSP, Referrer-Policy, X-XSS-Protection, Permissions-Policy
Security M-3: AuditLog bei Rollenänderungen
- user_service: action=role_changed mit old/new role
Security M-6: create_all nur in Development
- main.py: Base.metadata.create_all nur wenn not settings.is_production
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1576,3 +1576,83 @@ Keine Commits in dieser Session.
|
||||
- frontend/src/pages/CompanySettingsPage.tsx | 161 ++++++++++++++++++++-
|
||||
|
||||
---
|
||||
## 2026-05-26 10:39 – 10:39 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- DEVLOG.md | 18 ++
|
||||
- frontend/src/pages/mobile/MobileTodayScreen.tsx | 225 ++++++++++++++++++------
|
||||
|
||||
---
|
||||
## 2026-05-26 10:40 – 10:41 (1m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
- c8578f6 chore: CLAUDE.md aus Git-Tracking entfernen
|
||||
|
||||
### Geänderte Dateien
|
||||
- .gitignore | 1 +
|
||||
- CLAUDE.md | 347 -------------------------------------------------------------
|
||||
|
||||
---
|
||||
## 2026-05-26 10:41 – 10:42 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
- c9cb6d7 chore: .claude/ aus Git-Tracking entfernen
|
||||
|
||||
### Geänderte Dateien
|
||||
- .claude/agents/code-optimizer.md | 90 ------------------------------------
|
||||
- .claude/agents/frontend.md | 94 --------------------------------------
|
||||
- .claude/agents/security-auditor.md | 92 -------------------------------------
|
||||
- .gitignore | 1 +
|
||||
|
||||
---
|
||||
## 2026-05-26 10:42 – 10:43 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- .claude/agents/code-optimizer.md | 90 ------------------------------------
|
||||
- .claude/agents/frontend.md | 94 --------------------------------------
|
||||
- .claude/agents/security-auditor.md | 92 -------------------------------------
|
||||
- .gitignore | 1 +
|
||||
|
||||
---
|
||||
## 2026-05-26 10:51 – 10:54 (3m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- .claude/agents/code-optimizer.md | 90 ------------------------------------
|
||||
- .claude/agents/frontend.md | 94 --------------------------------------
|
||||
- .claude/agents/security-auditor.md | 92 -------------------------------------
|
||||
- .gitignore | 1 +
|
||||
|
||||
---
|
||||
## 2026-05-26 10:56 – 11:07 (11m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** timemaster
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- .claude/agents/code-optimizer.md | 90 ------------------------------------
|
||||
- .claude/agents/frontend.md | 94 --------------------------------------
|
||||
- .claude/agents/security-auditor.md | 92 -------------------------------------
|
||||
- .gitignore | 1 +
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user