v1.1.0: Production-readiness Release
- Backend + Frontend package.json: 1.0.0 → 1.1.0
- README:
- Version-Badge oben
- Features-Liste erweitert (Auto-Status, Monitoring, Hardening)
- Neue "Production-Deployment"-Sektion mit Pflicht-Env, Reverse-Proxy-
Hinweis, Default-Passwort-Warnung und Verweisen auf TESTING.md +
SECURITY-HARDENING.md
- Changelog für 1.1.0 + 1.0.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a8d42dd36d
commit
d57a9d01c1
91
README.md
91
README.md
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekommunikation, KFZ-Versicherung).
|
Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekommunikation, KFZ-Versicherung).
|
||||||
|
|
||||||
|
**Version: 1.1.0** ([Changelog](#changelog))
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Kundenverwaltung**: Privat- und Geschäftskunden mit Stammdaten
|
- **Kundenverwaltung**: Privat- und Geschäftskunden mit Stammdaten
|
||||||
|
|
@ -11,6 +13,9 @@ Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekomm
|
||||||
- **Zähler**: Strom-/Gaszähler mit Zählerstandhistorie
|
- **Zähler**: Strom-/Gaszähler mit Zählerstandhistorie
|
||||||
- **Rechnungen**: Rechnungsverwaltung für Energieverträge mit Dokumenten-Upload
|
- **Rechnungen**: Rechnungsverwaltung für Energieverträge mit Dokumenten-Upload
|
||||||
- **Vertrags-Cockpit**: Dashboard zur Überwachung offener Aufgaben (fehlende Dokumente, Rechnungen)
|
- **Vertrags-Cockpit**: Dashboard zur Überwachung offener Aufgaben (fehlende Dokumente, Rechnungen)
|
||||||
|
- **Auto-Vertragsstatus**: Lieferbestätigung-Upload setzt `DRAFT` → `ACTIVE` (mit Vertragsbeginn),
|
||||||
|
Kündigungsbestätigung-Upload setzt `ACTIVE` → `CANCELLED` (mit Datum),
|
||||||
|
nightly-Cron setzt `ACTIVE`-Verträge mit abgelaufenem `endDate` auf `EXPIRED`
|
||||||
- **Verträge**:
|
- **Verträge**:
|
||||||
- Energie (Strom, Gas)
|
- Energie (Strom, Gas)
|
||||||
- Telekommunikation (DSL, Glasfaser, Mobilfunk, TV)
|
- Telekommunikation (DSL, Glasfaser, Mobilfunk, TV)
|
||||||
|
|
@ -20,7 +25,14 @@ Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekomm
|
||||||
- **Email-Provisionierung**: Automatische E-Mail-Weiterleitung bei Plesk/cPanel/DirectAdmin
|
- **Email-Provisionierung**: Automatische E-Mail-Weiterleitung bei Plesk/cPanel/DirectAdmin
|
||||||
- **Berechtigungssystem**: Admin, Mitarbeiter, Nur-Lesen, Kundenportal
|
- **Berechtigungssystem**: Admin, Mitarbeiter, Nur-Lesen, Kundenportal
|
||||||
- **Verschlüsselte Zugangsdaten**: Portal-Passwörter AES-256-GCM verschlüsselt
|
- **Verschlüsselte Zugangsdaten**: Portal-Passwörter AES-256-GCM verschlüsselt
|
||||||
- **DSGVO-Compliance**: Audit-Logging, Einwilligungsverwaltung, Datenexport, Löschanfragen
|
- **DSGVO-Compliance**: Audit-Logging mit Hash-Chain-Integritätsprüfung,
|
||||||
|
Einwilligungsverwaltung, Datenexport, Löschanfragen
|
||||||
|
- **Sicherheits-Monitoring**: Realtime-Logging von Login-Fehlversuchen, IDOR-Abwehr,
|
||||||
|
SSRF-Blocks, JWT-Manipulation; Threshold-Detection (Brute-Force, IDOR-Probing) mit
|
||||||
|
Sofort-E-Mail-Alerts und stündlichem Digest – siehe Einstellungen → Monitoring
|
||||||
|
- **Production-Hardening**: 10 dokumentierte Hardening-Runden inkl. CORS, Helmet,
|
||||||
|
IDOR-Schutz, Rate-Limiting, SSRF/DNS-Rebinding-Block, Per-File-Ownership-Check, mehr
|
||||||
|
in [docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md)
|
||||||
- **Developer-Tools**: Datenbank-Browser und interaktives ER-Diagramm
|
- **Developer-Tools**: Datenbank-Browser und interaktives ER-Diagramm
|
||||||
|
|
||||||
## Tech Stack
|
## Tech Stack
|
||||||
|
|
@ -140,6 +152,39 @@ Nach dem Seed sind folgende Zugangsdaten verfügbar:
|
||||||
- **E-Mail:** admin@admin.com
|
- **E-Mail:** admin@admin.com
|
||||||
- **Passwort:** admin
|
- **Passwort:** admin
|
||||||
|
|
||||||
|
> **Wichtig:** Vor dem ersten Production-Deployment das Default-Passwort sofort
|
||||||
|
> ändern und Secrets rotieren – siehe [Production-Deployment](#production-deployment).
|
||||||
|
|
||||||
|
## Production-Deployment
|
||||||
|
|
||||||
|
Vor dem öffentlichen Schalten der Instanz muss in der Production-`.env`:
|
||||||
|
|
||||||
|
```env
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
# Pflicht-Rotation – per `openssl rand` neu generieren!
|
||||||
|
JWT_SECRET=$(openssl rand -hex 64) # min. 32 Zeichen
|
||||||
|
ENCRYPTION_KEY=$(openssl rand -hex 32) # genau 64 Hex-Zeichen
|
||||||
|
|
||||||
|
# Backend nur lokal lauschen lassen, public-Verkehr läuft über Reverse-Proxy
|
||||||
|
LISTEN_ADDR=127.0.0.1
|
||||||
|
|
||||||
|
# Bei separatem Frontend-Host: erlaubte Origins
|
||||||
|
CORS_ORIGINS=https://crm.deine-domain.de
|
||||||
|
```
|
||||||
|
|
||||||
|
Plus:
|
||||||
|
|
||||||
|
- **Reverse-Proxy** (Nginx/Plesk) so konfigurieren, dass `X-Forwarded-For` hart auf
|
||||||
|
die echte Client-IP gesetzt wird (nicht nur angefügt) – sonst Rate-Limit-Bypass möglich.
|
||||||
|
- **Default-Admin-Passwort ändern** (admin@admin.com / admin).
|
||||||
|
- **Manuelle Test-Checkliste** aus [docs/TESTING.md](docs/TESTING.md) einmal komplett
|
||||||
|
durchklicken.
|
||||||
|
- **Monitoring konfigurieren**: Einstellungen → Sicherheits-Monitoring → Alert-E-Mail
|
||||||
|
hinterlegen, Test-Alert senden, Digest aktivieren.
|
||||||
|
- Vollständige Hardening-Story + restliche Trade-offs:
|
||||||
|
[docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md)
|
||||||
|
|
||||||
## Developer-Tools aktivieren
|
## Developer-Tools aktivieren
|
||||||
|
|
||||||
Die Developer-Tools (Datenbankstruktur, ER-Diagramm) sind standardmäßig für Admins verfügbar. Falls der Menüpunkt nicht erscheint:
|
Die Developer-Tools (Datenbankstruktur, ER-Diagramm) sind standardmäßig für Admins verfügbar. Falls der Menüpunkt nicht erscheint:
|
||||||
|
|
@ -1105,6 +1150,50 @@ ersetzt.
|
||||||
- **Versionskontrolle**: Die entpackten JSON-Dateien unter Versionskontrolle
|
- **Versionskontrolle**: Die entpackten JSON-Dateien unter Versionskontrolle
|
||||||
stellen (außerhalb von `backend/factory-defaults/`, da der Ordner gitignored ist)
|
stellen (außerhalb von `backend/factory-defaults/`, da der Ordner gitignored ist)
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### 1.1.0 (2026-05-01)
|
||||||
|
|
||||||
|
**Production-readiness** – die Version, die wirklich öffentlich gehen darf.
|
||||||
|
|
||||||
|
- 🛡 **Security-Hardening**: 10 Runden statisches + dynamisches Audit, vollständig
|
||||||
|
dokumentiert in [docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md)
|
||||||
|
(CORS/Helmet/JWT, IDOR-Schutz an 30+ Endpoints, Mass-Assignment-Whitelists,
|
||||||
|
Zip-Slip, Path-Traversal, Login-Timing-Side-Channel, XFF-Rate-Limit-Bypass,
|
||||||
|
Customer-Liste-Leak, SSRF + DNS-Rebinding, Per-File-Ownership statt
|
||||||
|
freiem `/api/uploads`, JWT-Logout, Audit-Log-Hash-Chain).
|
||||||
|
- 🚨 **Sicherheits-Monitoring**: neue `SecurityEvent`-Tabelle + Hooks an Login,
|
||||||
|
Logout, Rate-Limit-Hit, IDOR-Abwehr, SSRF-Block, Password-Reset, JWT-Reject.
|
||||||
|
Threshold-Detection (Brute-Force, IDOR-Probing, SSRF-Probing) erzeugt
|
||||||
|
CRITICAL-Events. **Sofort-E-Mail-Alerts** für CRITICAL + **stündlicher Digest**
|
||||||
|
für HIGH/MEDIUM. UI in Einstellungen → Monitoring mit Filter, Pagination,
|
||||||
|
Log-leeren (mit optionalem Tage-Filter) und Test-Alert-Button.
|
||||||
|
- 🔄 **Auto-Vertragsstatus**:
|
||||||
|
- Lieferbestätigung-Upload → `DRAFT` → `ACTIVE` + `startDate`
|
||||||
|
- Kündigungsbestätigung-Upload → `ACTIVE` → `CANCELLED` + `cancellationConfirmationDate`
|
||||||
|
(mit Datums-Modal beim Upload)
|
||||||
|
- Nightly-Cron 02:00: alle `ACTIVE`-Verträge mit `endDate < heute` → `EXPIRED`
|
||||||
|
- 🔐 **Lazy bcrypt-Rehash**: Bestandshashes mit Cost 10 werden beim nächsten
|
||||||
|
Login transparent auf Cost 12 geupgradet.
|
||||||
|
- 🚪 **Logout-Endpoint** `POST /api/auth/logout`: invalidiert JWTs serverseitig
|
||||||
|
über `tokenInvalidatedAt`.
|
||||||
|
- 📦 **`npm audit fix`**: 8 transitive Vulnerabilities gefixt (lodash,
|
||||||
|
path-to-regexp, undici, minimatch).
|
||||||
|
|
||||||
|
### 1.0.0
|
||||||
|
|
||||||
|
Erste Release-Version.
|
||||||
|
|
||||||
|
- Kunden-, Vertrags-, Adress-, Bankkarten-, Ausweis- und Zählerverwaltung
|
||||||
|
- Energie-/Telekommunikations-/KFZ-Verträge mit typspezifischen Details
|
||||||
|
- Vertrags-Cockpit mit Rechnungsprüfung
|
||||||
|
- E-Mail-Client mit Anhang-Verwaltung
|
||||||
|
- DSGVO-Compliance: Audit-Log, Einwilligungen, Datenexport, Löschanfragen
|
||||||
|
- PDF-Auftragsvorlagen-System mit visueller Feldzuordnung
|
||||||
|
- Factory-Defaults für Stammdaten-Kataloge
|
||||||
|
- Mandantenfähigkeit über `customerEmailLabel` pro Provider
|
||||||
|
- Passwort-Reset-Flow + Rate-Limiting + Auto-Geburtstagsgrüße
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "opencrm-backend",
|
"name": "opencrm-backend",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"description": "OpenCRM Backend API",
|
"description": "OpenCRM Backend API",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"prisma": {
|
"prisma": {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "opencrm-frontend",
|
"name": "opencrm-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue