docs(PROJ-46): QA-Testergebnisse (9/9 PASS auf 192.168.1.132) dokumentieren

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-07-04 12:38:55 +02:00
co-authored by Claude Sonnet 5
parent 81744562c3
commit 08f486a28c
2 changed files with 374 additions and 0 deletions
+337
View File
@@ -7806,3 +7806,340 @@ Keine Commits in dieser Session.
- src/lib/api/routing_rules.ts | 94 ++++++++++++++++++++++++++++
---
## 2026-07-03 23:45 23:46 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- af16138 docs: README aktualisieren, Dev-Log/Dateiindex/GoBD-Checklist/Screenshots ins Repo
### Geänderte Dateien
- CODEBASE.md | 262 ++++++
- DEVLOG.md | 7808 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- README.md | 782 +++++++++---------
- docs/GOBD_DSGVO_CHECKLIST.md | 64 ++
- resume | 1 +
- screenshots/2026-06-12_22-27.png | Bin 0 -> 59929 bytes
- screenshots/2026-06-13_00-14.png | Bin 0 -> 125637 bytes
- screenshots/2026-06-14_21-59.png | Bin 0 -> 81727 bytes
- screenshots/2026-06-14_22-00.png | Bin 0 -> 195105 bytes
---
## 2026-07-03 23:46 23:48 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- CODEBASE.md | 262 ++++++
- DEVLOG.md | 7808 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- README.md | 782 +++++++++---------
- docs/GOBD_DSGVO_CHECKLIST.md | 64 ++
- resume | 1 +
- screenshots/2026-06-12_22-27.png | Bin 0 -> 59929 bytes
- screenshots/2026-06-13_00-14.png | Bin 0 -> 125637 bytes
- screenshots/2026-06-14_21-59.png | Bin 0 -> 81727 bytes
- screenshots/2026-06-14_22-00.png | Bin 0 -> 195105 bytes
---
## 2026-07-03 23:49 23:49 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- CODEBASE.md | 262 ++++++
- DEVLOG.md | 7808 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- README.md | 782 +++++++++---------
- docs/GOBD_DSGVO_CHECKLIST.md | 64 ++
- resume | 1 +
- screenshots/2026-06-12_22-27.png | Bin 0 -> 59929 bytes
- screenshots/2026-06-13_00-14.png | Bin 0 -> 125637 bytes
- screenshots/2026-06-14_21-59.png | Bin 0 -> 81727 bytes
- screenshots/2026-06-14_22-00.png | Bin 0 -> 195105 bytes
---
## 2026-07-03 23:50 23:53 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- CODEBASE.md | 262 ++++++
- DEVLOG.md | 7808 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- README.md | 782 +++++++++---------
- docs/GOBD_DSGVO_CHECKLIST.md | 64 ++
- resume | 1 +
- screenshots/2026-06-12_22-27.png | Bin 0 -> 59929 bytes
- screenshots/2026-06-13_00-14.png | Bin 0 -> 125637 bytes
- screenshots/2026-06-14_21-59.png | Bin 0 -> 81727 bytes
- screenshots/2026-06-14_22-00.png | Bin 0 -> 195105 bytes
---
## 2026-07-03 23:53 23:54 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- CODEBASE.md | 262 ++++++
- DEVLOG.md | 7808 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- README.md | 782 +++++++++---------
- docs/GOBD_DSGVO_CHECKLIST.md | 64 ++
- resume | 1 +
- screenshots/2026-06-12_22-27.png | Bin 0 -> 59929 bytes
- screenshots/2026-06-13_00-14.png | Bin 0 -> 125637 bytes
- screenshots/2026-06-14_21-59.png | Bin 0 -> 81727 bytes
- screenshots/2026-06-14_22-00.png | Bin 0 -> 195105 bytes
---
## 2026-07-03 23:54 23:56 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- c274df5 fix(deploy): update.sh synchronisiert systemd-Units bei jedem Deploy
### Geänderte Dateien
- update.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-03 23:58 23:58 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- update.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-03 23:59 00:01 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- update.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-04 00:02 00:02 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- 04e5b0f fix(security-audit): HTTPS/Port-Checks erkennen nftables Set-Syntax nicht
### Geänderte Dateien
- internal/api/admin_security_handlers.go | 33 ++++++++++++++++++++++++++++++---
---
## 2026-07-04 00:08 09:43 (9h 34m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- internal/api/admin_security_handlers.go | 33 ++++++++++++++++++++++++++++++---
---
## 2026-07-04 09:44 09:44 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- internal/api/admin_security_handlers.go | 33 ++++++++++++++++++++++++++++++---
---
## 2026-07-04 09:44 10:49 (1h 04m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- internal/api/admin_security_handlers.go | 33 ++++++++++++++++++++++++++++++---
---
## 2026-07-04 11:55 11:56 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- internal/api/admin_security_handlers.go | 33 ++++++++++++++++++++++++++++++---
---
## 2026-07-04 12:00 12:00 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- features/INDEX.md | 4 ++--
- features/PROJ-43-archivierungsregeln.md | 15 ++++++++++++++-
- features/PROJ-52-vollstaendigkeits-reconciliation.md | 21 ++++++++++++++++++---
---
## 2026-07-04 12:01 12:05 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- features/INDEX.md | 4 ++--
- features/PROJ-43-archivierungsregeln.md | 15 ++++++++++++++-
- features/PROJ-52-vollstaendigkeits-reconciliation.md | 21 ++++++++++++++++++---
---
## 2026-07-04 12:06 12:07 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- a739015 docs: GoBD-Checklist auf aktuellen Stand bringen (PROJ-52, PROJ-56c)
### Geänderte Dateien
- docs/GOBD_DSGVO_CHECKLIST.md | 4 ++--
---
## 2026-07-04 12:08 12:12 (3m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- 6d67a6b docs: GoBD-Checklist auf aktuellen Stand bringen, Spec für PROJ-56c nachtragen
### Geänderte Dateien
- docs/GOBD_DSGVO_CHECKLIST.md | 56 ++++++++++++++++++++++++++------------------------------
- features/INDEX.md | 1 +
- features/PROJ-56c-cron-purge-markierte-mails.md | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-04 12:13 12:14 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- 17633cb docs: Migrations-Runbook für Compliance-Erhalt-Check ergänzen (GoBD Punkt 10)
### Geänderte Dateien
- docs/GOBD_DSGVO_CHECKLIST.md | 18 +++++++-----------
- docs/MIGRATION_RUNBOOK.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-07-04 12:15 12:17 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- 45ac685 docs(PROJ-65): Spec für physische Tenant-Trennung im Storage-Layer
### Geänderte Dateien
- features/INDEX.md | 3 ++-
---
## 2026-07-04 12:17 12:17 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- features/INDEX.md | 3 ++-
---
## 2026-07-04 12:20 12:21 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- bd72761 chore: Screenshots aus dem Repo entfernen
### Geänderte Dateien
- .gitignore | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- screenshots/2026-06-12_22-27.png | Bin 59929 -> 0 bytes
- screenshots/2026-06-13_00-14.png | Bin 125637 -> 0 bytes
- screenshots/2026-06-14_21-59.png | Bin 81727 -> 0 bytes
- screenshots/2026-06-14_22-00.png | Bin 195105 -> 0 bytes
---
## 2026-07-04 12:23 12:25 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
- 8174456 docs: README auf aktuellen Stand bringen (PROJ-43/52 Deployed, Config-Referenz vervollständigt)
### Geänderte Dateien
- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
---
## 2026-07-04 12:26 12:27 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
---
## 2026-07-04 12:27 12:27 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
---
## 2026-07-04 12:28 12:28 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
---
## 2026-07-04 12:38 12:38 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** archivmail
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- README.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
---
@@ -76,6 +76,43 @@ Konkreter Support-Fall (2026-06-13): patrick@perlbach24.de konnte sich trotz Pas
- Nicht-Tenant-User per E-Mail → Erfolg
- Unbekannter Identifier → `invalid_credentials`
## QA Test Results (2026-07-04, QA Engineer)
**Testumgebung:** Testserver 192.168.1.132 (nicht Produktiv 131). Dedizierte Test-User
angelegt und nach Test wieder entfernt:
- `qa46-tenant` / `qa46-tenant@perlbach24.de` (tenant_id=1, role user) — username ≠ email
- `qa46-super` / `qa46-super@example.com` (tenant_id NULL, role superadmin)
Passwort `TestPw123!` (bcrypt cost 12). Beide User + zugehörige `login_attempts` nach Testende
gelöscht (verifiziert: 0 verbleibende `qa46%`-User). Audit-Log-Einträge bleiben append-only
erhalten (GoBD). Keine bestehenden Accounts verändert.
**Gesamtergebnis: BESTANDEN (9/9 Punkte pass, 0 Bugs).**
| # | Testpunkt | Erwartung | Ergebnis | Status |
|---|-----------|-----------|----------|--------|
| 1 | Tenant-User Login per E-Mail | 200 | 200, `user.username=qa46-tenant` korrekt aufgelöst | PASS |
| 2 | Tenant-User Login per Username | 401 | 401 invalid_credentials | PASS |
| 3 | Non-Tenant (superadmin, tenant_id NULL) per Username | 200 | 200 | PASS |
| 4 | Non-Tenant per E-Mail | 200 | 200 | PASS |
| 5 | Unbekannter Identifier | 401 | 401 (`{"error":"invalid credentials"}`) | PASS |
| 5b | Tenant-E-Mail + falsches Passwort | 401 | 401 | PASS |
| 6 | Rate-Limiting mit E-Mail-String als Schlüssel | 429 nach Fehlversuchen | 429 ausgelöst; `login_attempts.username` speichert vollständige E-Mail (VARCHAR(255)) ungekürzt | PASS |
| 7 | Audit-Log protokolliert Fehlversuche mit eingegebenem Identifier | Identifier im Log | Fehlversuche geloggt mit exaktem Identifier (`qa46-tenant@perlbach24.de`, `qa46-tenant`), Detail `invalid_password`/`rate limited`; Erfolg loggt kanonischen `user.Username` | PASS |
| 8 | IMAP-Login (PROJ-26, VerifyPassword-Pfad) per Username unverändert | LOGIN completed | `a OK LOGIN completed` per Username auf Port 993; VerifyPassword unangetastet, genutzt in `internal/imapserver/server.go:380` | PASS |
| 9 | Frontend: `/` E-Mail-Label+type=email, `/admin/login` "Benutzername oder E-Mail-Adresse" | korrekt | Deployte Seiten: `/` rendert `E-Mail-Adresse` + `type="email"`; `/admin/login` rendert `Benutzername oder E-Mail-Adresse` (type=text) | PASS |
**Code-Review-Notizen:**
- `VerifyLogin` (userstore.go): Email-Lookup → Fallback `username = $1 AND tenant_id IS NULL`.
Timing-Side-Channel geschlossen (Dummy-bcrypt bei No-Match). `VerifyPassword` unverändert.
- `Manager.Login` (auth.go:79) ruft `VerifyLogin`. LDAP-`extractDomain` bleibt kompatibel (E-Mail-Format).
- Kein Regressions-Fund gegen bestehende Auth-/IMAP-Features.
**Hinweis (kein Bug, informativ):** Alle produktiven Tenant-User auf 132 haben aktuell
`username == email` (z.B. `patrick@perlbach24.de`), sodass ihr Username-Login weiterhin über
den Email-Match greift. Der Reject-Pfad (Punkt 2) wurde deshalb bewusst mit einem Test-User
`username != email` verifiziert. `homelocal-admin` (id 120) wäre ein produktiver Fall mit
abweichendem Username — Passwort unbekannt, daher nicht live geprüft.
## Migration (bereits durchgeführt am 2026-06-13)
- Datenqualitäts-Check auf 192.168.1.131: 0 Tenant-User mit fehlender/ungültiger E-Mail, 0 Username↔E-Mail-Kollisionen
- `login_attempts.username` von VARCHAR(100) → VARCHAR(255) erweitert (idempotenter `initSchema`-Eintrag in `internal/userstore/userstore.go` ergänzt)