feat(admin): SUPER_ADMIN TLS-Zertifikat-Status + Renewal-Trigger

Neuer Router /admin/tls (SUPER_ADMIN only, AuditLog, Rate-Limit 5/hour):
- GET  /admin/tls/status         – erkennt proxy/certbot/internal-Modus,
  liest Ablaufdatum via openssl x509 -enddate
- POST /admin/tls/renew/certbot  – ruft setup-tls.sh <domain> auf
- POST /admin/tls/renew/internal – ruft setup-tls-internal.sh <hostname> [ip]
  auf, reloaded nginx danach

Läuft mit den Root-Rechten des bestehenden timemaster.service (User=root,
unverändert) - Angriffsfläche dadurch begrenzt auf SUPER_ADMIN-Auth +
Domain/Hostname-Validierung (Regex, kein Shell-Interpolieren, subprocess
mit Argument-Liste statt shell=True).

Frontend: neuer Tab "Server / TLS" in TenantsPage – Status-Anzeige +
zwei Formulare (öffentlich/intern).

3 neue Tests in test_tls_admin.py (Rollen-Gate, Status im Testcontext,
Input-Validierung).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LTxkZEUdfgMxZvHPiZJ8bV
This commit is contained in:
2026-08-05 20:29:47 +02:00
co-authored by Claude Sonnet 5
parent f354bddd1e
commit f3ed234e56
6 changed files with 436 additions and 3 deletions
+82
View File
@@ -2722,3 +2722,85 @@ Keine Commits in dieser Session.
- backend/app/routers/hours_payouts.py | 22 ++++++++++++----------
---
## 2026-08-05 19:01 19:17 (16m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- edb727e fix(security): python-jose CVE-2024-33663 durch pyjwt ersetzt, Deps gepinnt
### Geänderte Dateien
- DEVLOG.md | 36 ++++++++++++++++++++++++++++++++++++
- backend/app/core/dependencies.py | 2 +-
- backend/app/core/security.py | 3 ++-
- backend/app/routers/auth.py | 2 +-
- backend/requirements.txt | 58 +++++++++++++++++++++++++++++-----------------------------
- nginx.conf | 11 ++++++++++-
---
## 2026-08-05 19:18 19:20 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 36 ++++++++++++++++++++++++++++++++++++
- backend/app/core/dependencies.py | 2 +-
- backend/app/core/security.py | 3 ++-
- backend/app/routers/auth.py | 2 +-
- backend/requirements.txt | 58 +++++++++++++++++++++++++++++-----------------------------
- nginx.conf | 11 ++++++++++-
---
## 2026-08-05 19:23 19:23 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 36 ++++++++++++++++++++++++++++++++++++
- backend/app/core/dependencies.py | 2 +-
- backend/app/core/security.py | 3 ++-
- backend/app/routers/auth.py | 2 +-
- backend/requirements.txt | 58 +++++++++++++++++++++++++++++-----------------------------
- nginx.conf | 11 ++++++++++-
---
## 2026-08-05 19:33 19:35 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 319e070 feat(tls): optionales certbot-Setup vorbereitet (Option A)
### Geänderte Dateien
- nginx.conf | 13 +++++++------
- setup-tls.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-08-05 19:35 19:36 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
- 9c86cbc feat(tls): optionales Setup für interne CA vorbereitet
### Geänderte Dateien
- setup-tls-internal.sh | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-08-05 19:37 19:37 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- setup-tls-internal.sh | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---