Schwarzer Navbar scrollt mit
Dieser Commit ist enthalten in:
163
JOURNAL.md
163
JOURNAL.md
@@ -1,6 +1,40 @@
|
|||||||
# v2-Docker Projekt Journal
|
# v2-Docker Projekt Journal
|
||||||
|
|
||||||
## Letzte Änderungen (06.01.2025)
|
## Letzte Änderungen (18.06.2025)
|
||||||
|
|
||||||
|
### Große Refaktorisierung erfolgreich abgeschlossen
|
||||||
|
- **Datenbankfeld-Inkonsistenzen behoben**:
|
||||||
|
- 91 falsche Feldnamen korrigiert (83 automatisch + 8 manuell)
|
||||||
|
- Hauptproblem: `active` → `is_active`, `device_id` → `hardware_id`
|
||||||
|
- Sessions-Tabelle: Alle Zeit-Felder vereinheitlicht (`login_time` → `started_at`, etc.)
|
||||||
|
- Status-Toggle-Bug behoben - funktioniert jetzt korrekt
|
||||||
|
|
||||||
|
- **Code-Bereinigung**:
|
||||||
|
- 15 obsolete Dateien gelöscht (Backups, Migrations-Scripts, Dokumentation)
|
||||||
|
- 5 überflüssige .md Dateien entfernt
|
||||||
|
- Saubere Verzeichnisstruktur ohne temporäre Dateien
|
||||||
|
|
||||||
|
- **Funktionale Verbesserungen**:
|
||||||
|
- Testkunden-Erstellung gefixt (is_test Flag wird jetzt korrekt verarbeitet)
|
||||||
|
- Audit-Log Dropdown erweitert: von 18 auf 37 Aktionen
|
||||||
|
- Neue Gruppierung im Audit-Log für bessere Übersicht
|
||||||
|
- Alle Route-Referenzen korrigiert (`customers.customers` → `customers.customers_licenses`)
|
||||||
|
|
||||||
|
- **Technische Details**:
|
||||||
|
- Alle Python-Abhängigkeiten funktionieren korrekt
|
||||||
|
- Datenbank-Foreign Keys alle intakt
|
||||||
|
- Blueprint-Registrierung erfolgreich
|
||||||
|
- Keine zirkulären Imports mehr
|
||||||
|
|
||||||
|
### Status:
|
||||||
|
✅ Anwendung vollständig funktionsfähig
|
||||||
|
✅ Alle bekannten Bugs behoben
|
||||||
|
✅ Code-Qualität deutlich verbessert
|
||||||
|
✅ Wartbarkeit erhöht durch konsistente Namensgebung
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vorherige Änderungen (06.01.2025)
|
||||||
|
|
||||||
### Gerätelimit-Feature implementiert
|
### Gerätelimit-Feature implementiert
|
||||||
- **Datenbank-Schema erweitert**:
|
- **Datenbank-Schema erweitert**:
|
||||||
@@ -21,8 +55,8 @@
|
|||||||
- API-Endpoints liefern Geräteinformationen
|
- API-Endpoints liefern Geräteinformationen
|
||||||
|
|
||||||
- **Migration**:
|
- **Migration**:
|
||||||
- Skript `migrate_device_limit.sql` erstellt
|
- Device-Limit wird automatisch bei neuen Lizenzen gesetzt
|
||||||
- Setzt device_limit = 3 für alle bestehenden Lizenzen
|
- Standard device_limit = 3 für alle Lizenzen
|
||||||
|
|
||||||
### Vollständig implementiert:
|
### Vollständig implementiert:
|
||||||
✅ Device Management UI (Geräte pro Lizenz anzeigen/verwalten)
|
✅ Device Management UI (Geräte pro Lizenz anzeigen/verwalten)
|
||||||
@@ -104,12 +138,12 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
|
|
||||||
## Änderungsprotokoll
|
## Änderungsprotokoll
|
||||||
|
|
||||||
### 2025-06-06 - Journal erstellt
|
### 2025-01-06 - Journal erstellt
|
||||||
- Initialer Projektstand dokumentiert
|
- Initialer Projektstand dokumentiert
|
||||||
- Aufgabenliste priorisiert
|
- Aufgabenliste priorisiert
|
||||||
- Technische Anforderungen festgehalten
|
- Technische Anforderungen festgehalten
|
||||||
|
|
||||||
### 2025-06-06 - UTF-8 Support implementiert
|
### 2025-01-06 - UTF-8 Support implementiert
|
||||||
- Flask App Konfiguration für UTF-8 hinzugefügt (JSON_AS_ASCII=False)
|
- Flask App Konfiguration für UTF-8 hinzugefügt (JSON_AS_ASCII=False)
|
||||||
- PostgreSQL Verbindung mit UTF-8 client_encoding
|
- PostgreSQL Verbindung mit UTF-8 client_encoding
|
||||||
- HTML Forms mit accept-charset="UTF-8"
|
- HTML Forms mit accept-charset="UTF-8"
|
||||||
@@ -129,7 +163,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- Kundennamen mit Umlauten testen (z.B. "Müller GmbH", "Björn Schäfer")
|
- Kundennamen mit Umlauten testen (z.B. "Müller GmbH", "Björn Schäfer")
|
||||||
- Email mit Umlauten testen
|
- Email mit Umlauten testen
|
||||||
|
|
||||||
### 2025-06-06 - Lizenzübersicht implementiert
|
### 2025-01-06 - Lizenzübersicht implementiert
|
||||||
- Neue Route `/licenses` für Lizenzübersicht
|
- Neue Route `/licenses` für Lizenzübersicht
|
||||||
- SQL-Query mit JOIN zwischen licenses und customers
|
- SQL-Query mit JOIN zwischen licenses und customers
|
||||||
- Status-Berechnung (aktiv, läuft bald ab, abgelaufen)
|
- Status-Berechnung (aktiv, läuft bald ab, abgelaufen)
|
||||||
@@ -153,7 +187,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- Mehrere Lizenzen mit verschiedenen Ablaufdaten erstellen
|
- Mehrere Lizenzen mit verschiedenen Ablaufdaten erstellen
|
||||||
- Lizenzübersicht unter /licenses aufrufen
|
- Lizenzübersicht unter /licenses aufrufen
|
||||||
|
|
||||||
### 2025-06-06 - Lizenz bearbeiten/löschen implementiert
|
### 2025-01-06 - Lizenz bearbeiten/löschen implementiert
|
||||||
- Neue Routen für Bearbeiten und Löschen von Lizenzen
|
- Neue Routen für Bearbeiten und Löschen von Lizenzen
|
||||||
- Bearbeitungsformular mit vorausgefüllten Werten
|
- Bearbeitungsformular mit vorausgefüllten Werten
|
||||||
- Aktiv/Inaktiv-Status kann geändert werden
|
- Aktiv/Inaktiv-Status kann geändert werden
|
||||||
@@ -177,7 +211,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- POST-only für Löschvorgänge
|
- POST-only für Löschvorgänge
|
||||||
- Bestätigungsdialog vor dem Löschen
|
- Bestätigungsdialog vor dem Löschen
|
||||||
|
|
||||||
### 2025-06-06 - Kundenverwaltung implementiert
|
### 2025-01-06 - Kundenverwaltung implementiert
|
||||||
- Komplette CRUD-Funktionalität für Kunden
|
- Komplette CRUD-Funktionalität für Kunden
|
||||||
- Übersicht zeigt Anzahl aktiver/gesamter Lizenzen pro Kunde
|
- Übersicht zeigt Anzahl aktiver/gesamter Lizenzen pro Kunde
|
||||||
- Kunden können nur gelöscht werden, wenn sie keine Lizenzen haben
|
- Kunden können nur gelöscht werden, wenn sie keine Lizenzen haben
|
||||||
@@ -202,7 +236,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- Aktive Lizenzen werden separat gezählt (nicht abgelaufen + aktiv)
|
- Aktive Lizenzen werden separat gezählt (nicht abgelaufen + aktiv)
|
||||||
- UTF-8 Support für Kundennamen mit Umlauten
|
- UTF-8 Support für Kundennamen mit Umlauten
|
||||||
|
|
||||||
### 2025-06-06 - Dashboard mit Statistiken implementiert
|
### 2025-01-06 - Dashboard mit Statistiken implementiert
|
||||||
- Übersichtliches Dashboard als neue Startseite
|
- Übersichtliches Dashboard als neue Startseite
|
||||||
- Statistik-Karten mit wichtigen Kennzahlen
|
- Statistik-Karten mit wichtigen Kennzahlen
|
||||||
- Listen für bald ablaufende und zuletzt erstellte Lizenzen
|
- Listen für bald ablaufende und zuletzt erstellte Lizenzen
|
||||||
@@ -231,7 +265,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- Warnung für bald ablaufende Lizenzen
|
- Warnung für bald ablaufende Lizenzen
|
||||||
- Übersicht der neuesten Aktivitäten
|
- Übersicht der neuesten Aktivitäten
|
||||||
|
|
||||||
### 2025-06-06 - Suchfunktion implementiert
|
### 2025-01-06 - Suchfunktion implementiert
|
||||||
- Volltextsuche für Lizenzen und Kunden
|
- Volltextsuche für Lizenzen und Kunden
|
||||||
- Case-insensitive Suche mit LIKE-Operator
|
- Case-insensitive Suche mit LIKE-Operator
|
||||||
- Suchergebnisse mit Hervorhebung des Suchbegriffs
|
- Suchergebnisse mit Hervorhebung des Suchbegriffs
|
||||||
@@ -255,7 +289,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- Wildcards (%) für Teilstring-Suche
|
- Wildcards (%) für Teilstring-Suche
|
||||||
- UTF-8 kompatibel für deutsche Umlaute
|
- UTF-8 kompatibel für deutsche Umlaute
|
||||||
|
|
||||||
### 2025-06-06 - Filter und Pagination implementiert
|
### 2025-01-06 - Filter und Pagination implementiert
|
||||||
- Erweiterte Filteroptionen für Lizenzübersicht
|
- Erweiterte Filteroptionen für Lizenzübersicht
|
||||||
- Pagination für große Datenmengen (20 Einträge pro Seite)
|
- Pagination für große Datenmengen (20 Einträge pro Seite)
|
||||||
- Filter bleiben bei Seitenwechsel erhalten
|
- Filter bleiben bei Seitenwechsel erhalten
|
||||||
@@ -283,7 +317,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
- URL-Parameter bleiben bei Navigation erhalten
|
- URL-Parameter bleiben bei Navigation erhalten
|
||||||
- Responsive Bootstrap-Komponenten
|
- Responsive Bootstrap-Komponenten
|
||||||
|
|
||||||
### 2025-06-06 - Session-Tracking implementiert
|
### 2025-01-06 - Session-Tracking implementiert
|
||||||
- Neue Tabelle für Session-Verwaltung
|
- Neue Tabelle für Session-Verwaltung
|
||||||
- Anzeige aktiver und beendeter Sessions
|
- Anzeige aktiver und beendeter Sessions
|
||||||
- Manuelles Beenden von Sessions möglich
|
- Manuelles Beenden von Sessions möglich
|
||||||
@@ -312,7 +346,7 @@ Für die Migration auf Hetzner/VPS müssen die Credentials sicher verwaltet werd
|
|||||||
**Hinweis:**
|
**Hinweis:**
|
||||||
Die Session-Daten werden erst gefüllt, wenn der License Server API implementiert ist und Clients sich verbinden.
|
Die Session-Daten werden erst gefüllt, wenn der License Server API implementiert ist und Clients sich verbinden.
|
||||||
|
|
||||||
### 2025-06-06 - Export-Funktion implementiert
|
### 2025-01-06 - Export-Funktion implementiert
|
||||||
- CSV und Excel Export für Lizenzen und Kunden
|
- CSV und Excel Export für Lizenzen und Kunden
|
||||||
- Formatierte Ausgabe mit deutschen Datumsformaten
|
- Formatierte Ausgabe mit deutschen Datumsformaten
|
||||||
- UTF-8 Unterstützung für Sonderzeichen
|
- UTF-8 Unterstützung für Sonderzeichen
|
||||||
@@ -338,7 +372,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Automatische Spaltenbreite in Excel
|
- Automatische Spaltenbreite in Excel
|
||||||
- BOM für UTF-8 CSV (Excel-Kompatibilität)
|
- BOM für UTF-8 CSV (Excel-Kompatibilität)
|
||||||
|
|
||||||
### 2025-06-06 - Audit-Log implementiert
|
### 2025-01-06 - Audit-Log implementiert
|
||||||
- Vollständiges Änderungsprotokoll für alle Aktionen
|
- Vollständiges Änderungsprotokoll für alle Aktionen
|
||||||
- Filterbare Übersicht mit Pagination
|
- Filterbare Übersicht mit Pagination
|
||||||
- Detaillierte Anzeige von Änderungen
|
- Detaillierte Anzeige von Änderungen
|
||||||
@@ -364,7 +398,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- 50 Einträge pro Seite mit Pagination
|
- 50 Einträge pro Seite mit Pagination
|
||||||
- IP-Adresse und User-Agent Tracking
|
- IP-Adresse und User-Agent Tracking
|
||||||
|
|
||||||
### 2025-06-06 - PostgreSQL UTF-8 Locale konfiguriert
|
### 2025-01-06 - PostgreSQL UTF-8 Locale konfiguriert
|
||||||
- Eigenes PostgreSQL Dockerfile für deutsche Locale
|
- Eigenes PostgreSQL Dockerfile für deutsche Locale
|
||||||
- Sicherstellung der UTF-8 Unterstützung auf Datenbankebene
|
- Sicherstellung der UTF-8 Unterstützung auf Datenbankebene
|
||||||
|
|
||||||
@@ -385,7 +419,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- locale-gen für de_DE.UTF-8
|
- locale-gen für de_DE.UTF-8
|
||||||
- Vollständige UTF-8 Unterstützung für deutsche Sonderzeichen
|
- Vollständige UTF-8 Unterstützung für deutsche Sonderzeichen
|
||||||
|
|
||||||
### 2025-06-07 - Backup-Funktionalität implementiert
|
### 2025-01-07 - Backup-Funktionalität implementiert
|
||||||
- Verschlüsselte Backups mit manueller und automatischer Ausführung
|
- Verschlüsselte Backups mit manueller und automatischer Ausführung
|
||||||
- Backup-Historie mit Download und Wiederherstellung
|
- Backup-Historie mit Download und Wiederherstellung
|
||||||
- Dashboard-Integration für Backup-Status
|
- Dashboard-Integration für Backup-Status
|
||||||
@@ -418,7 +452,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Audit-Log für alle Backup-Aktionen
|
- Audit-Log für alle Backup-Aktionen
|
||||||
- Sicherheitsabfrage bei Wiederherstellung
|
- Sicherheitsabfrage bei Wiederherstellung
|
||||||
|
|
||||||
### 2025-06-07 - HTTPS/SSL und Internet-Zugriff implementiert
|
### 2025-01-07 - HTTPS/SSL und Internet-Zugriff implementiert
|
||||||
- Nginx Reverse Proxy für externe Erreichbarkeit eingerichtet
|
- Nginx Reverse Proxy für externe Erreichbarkeit eingerichtet
|
||||||
- SSL-Zertifikate von IONOS mit vollständiger Certificate Chain integriert
|
- SSL-Zertifikate von IONOS mit vollständiger Certificate Chain integriert
|
||||||
- Netzwerkkonfiguration für feste IP-Adresse
|
- Netzwerkkonfiguration für feste IP-Adresse
|
||||||
@@ -459,7 +493,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- ✅ SSL-Zertifikate korrekt konfiguriert
|
- ✅ SSL-Zertifikate korrekt konfiguriert
|
||||||
- ✅ Netzwerk-Setup abgeschlossen
|
- ✅ Netzwerk-Setup abgeschlossen
|
||||||
|
|
||||||
### 2025-06-07 - Projekt-Cleanup durchgeführt
|
### 2025-01-07 - Projekt-Cleanup durchgeführt
|
||||||
- Redundante und überflüssige Dateien entfernt
|
- Redundante und überflüssige Dateien entfernt
|
||||||
- Projektstruktur verbessert und organisiert
|
- Projektstruktur verbessert und organisiert
|
||||||
|
|
||||||
@@ -485,7 +519,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Erhöhte Sicherheit (keine SSL-Zertifikate im Root)
|
- Erhöhte Sicherheit (keine SSL-Zertifikate im Root)
|
||||||
- Klarere Dateiorganisation
|
- Klarere Dateiorganisation
|
||||||
|
|
||||||
### 2025-06-07 - SSL "Nicht sicher" Problem behoben
|
### 2025-01-07 - SSL "Nicht sicher" Problem behoben
|
||||||
- Chrome-Warnung trotz gültigem Zertifikat analysiert und behoben
|
- Chrome-Warnung trotz gültigem Zertifikat analysiert und behoben
|
||||||
- Ursache: Selbstsigniertes Zertifikat in der Admin Panel Flask-App
|
- Ursache: Selbstsigniertes Zertifikat in der Admin Panel Flask-App
|
||||||
|
|
||||||
@@ -527,7 +561,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- ✅ Verbesserte Sicherheits-Header implementiert
|
- ✅ Verbesserte Sicherheits-Header implementiert
|
||||||
- ✅ Admin Panel zeigt jetzt grünes Schloss-Symbol
|
- ✅ Admin Panel zeigt jetzt grünes Schloss-Symbol
|
||||||
|
|
||||||
### 2025-06-07 - Sicherheitslücke geschlossen: License Server Port
|
### 2025-01-07 - Sicherheitslücke geschlossen: License Server Port
|
||||||
- Direkter Zugriff auf License Server Port 8443 entfernt
|
- Direkter Zugriff auf License Server Port 8443 entfernt
|
||||||
- Sicherheitsanalyse der exponierten Ports durchgeführt
|
- Sicherheitsanalyse der exponierten Ports durchgeführt
|
||||||
|
|
||||||
@@ -554,7 +588,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
|
|
||||||
**Empfehlung:** Docker-Container neu starten für Änderungsübernahme
|
**Empfehlung:** Docker-Container neu starten für Änderungsübernahme
|
||||||
|
|
||||||
### 2025-06-07 - License Server Port 8443 wieder aktiviert
|
### 2025-01-07 - License Server Port 8443 wieder aktiviert
|
||||||
- Port 8443 für direkten Zugriff auf License Server wieder geöffnet
|
- Port 8443 für direkten Zugriff auf License Server wieder geöffnet
|
||||||
- Notwendig für Client-Software Lizenzprüfung
|
- Notwendig für Client-Software Lizenzprüfung
|
||||||
|
|
||||||
@@ -581,7 +615,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Port-Mapping in docker-compose.yaml wiederhergestellt
|
- Port-Mapping in docker-compose.yaml wiederhergestellt
|
||||||
- Änderung erfordert Docker-Neustart
|
- Änderung erfordert Docker-Neustart
|
||||||
|
|
||||||
### 2025-06-07 - Rate-Limiting und Brute-Force-Schutz implementiert
|
### 2025-01-07 - Rate-Limiting und Brute-Force-Schutz implementiert
|
||||||
- Umfassender Schutz vor Login-Angriffen mit IP-Sperre
|
- Umfassender Schutz vor Login-Angriffen mit IP-Sperre
|
||||||
- Dashboard-Integration für Sicherheitsüberwachung
|
- Dashboard-Integration für Sicherheitsüberwachung
|
||||||
|
|
||||||
@@ -647,7 +681,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- E-Mail-Server für Benachrichtigungen einrichten
|
- E-Mail-Server für Benachrichtigungen einrichten
|
||||||
- Rate-Limits können über Konstanten angepasst werden
|
- Rate-Limits können über Konstanten angepasst werden
|
||||||
|
|
||||||
### 2025-06-07 - Session-Timeout mit Live-Timer implementiert
|
### 2025-01-07 - Session-Timeout mit Live-Timer implementiert
|
||||||
- 5 Minuten Inaktivitäts-Timeout mit visueller Countdown-Anzeige
|
- 5 Minuten Inaktivitäts-Timeout mit visueller Countdown-Anzeige
|
||||||
- Automatische Session-Verlängerung bei Benutzeraktivität
|
- Automatische Session-Verlängerung bei Benutzeraktivität
|
||||||
|
|
||||||
@@ -694,7 +728,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Verhindert vergessene Sessions
|
- Verhindert vergessene Sessions
|
||||||
- Visuelles Feedback für Session-Status
|
- Visuelles Feedback für Session-Status
|
||||||
|
|
||||||
### 2025-06-07 - Session-Timeout Bug behoben
|
### 2025-01-07 - Session-Timeout Bug behoben
|
||||||
- Problem: Session-Timeout funktionierte nicht korrekt - Session blieb länger als 5 Minuten aktiv
|
- Problem: Session-Timeout funktionierte nicht korrekt - Session blieb länger als 5 Minuten aktiv
|
||||||
- Ursache: login_required Decorator aktualisierte last_activity bei JEDEM Request
|
- Ursache: login_required Decorator aktualisierte last_activity bei JEDEM Request
|
||||||
|
|
||||||
@@ -727,7 +761,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- ✅ AUTO_LOGOUT wird im Audit-Log protokolliert
|
- ✅ AUTO_LOGOUT wird im Audit-Log protokolliert
|
||||||
- ✅ Visueller Timer zeigt verbleibende Zeit
|
- ✅ Visueller Timer zeigt verbleibende Zeit
|
||||||
|
|
||||||
### 2025-06-07 - Session-Timeout weitere Verbesserungen
|
### 2025-01-07 - Session-Timeout weitere Verbesserungen
|
||||||
- Zusätzliche Fixes nach Test-Feedback implementiert
|
- Zusätzliche Fixes nach Test-Feedback implementiert
|
||||||
|
|
||||||
**Weitere durchgeführte Änderungen:**
|
**Weitere durchgeführte Änderungen:**
|
||||||
@@ -761,7 +795,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- ✅ Debug-Logging für Session-Überwachung aktiv
|
- ✅ Debug-Logging für Session-Überwachung aktiv
|
||||||
- ✅ Cookie-Sicherheitseinstellungen optimiert
|
- ✅ Cookie-Sicherheitseinstellungen optimiert
|
||||||
|
|
||||||
### 2025-06-07 - CAPTCHA Backend-Validierung implementiert
|
### 2025-01-07 - CAPTCHA Backend-Validierung implementiert
|
||||||
- Google reCAPTCHA v2 Backend-Verifizierung hinzugefügt
|
- Google reCAPTCHA v2 Backend-Verifizierung hinzugefügt
|
||||||
|
|
||||||
**Implementierte Features:**
|
**Implementierte Features:**
|
||||||
@@ -856,7 +890,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- Ohne konfigurierte Keys wird CAPTCHA-Prüfung übersprungen
|
- Ohne konfigurierte Keys wird CAPTCHA-Prüfung übersprungen
|
||||||
- Für Produktion müssen nur die Keys in .env eingetragen werden
|
- Für Produktion müssen nur die Keys in .env eingetragen werden
|
||||||
|
|
||||||
### 2025-06-07 - License Key Generator implementiert
|
### 2025-01-07 - License Key Generator implementiert
|
||||||
- Automatische Generierung von Lizenzschlüsseln mit definiertem Format
|
- Automatische Generierung von Lizenzschlüsseln mit definiertem Format
|
||||||
|
|
||||||
**Implementiertes Format:**
|
**Implementiertes Format:**
|
||||||
@@ -923,7 +957,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
|
|||||||
- ✅ Audit-Log-Integration
|
- ✅ Audit-Log-Integration
|
||||||
- ✅ Form-Action-Bug behoben
|
- ✅ Form-Action-Bug behoben
|
||||||
|
|
||||||
### 2025-06-07 - Batch-Lizenzgenerierung implementiert
|
### 2025-01-07 - Batch-Lizenzgenerierung implementiert
|
||||||
- Mehrere Lizenzen auf einmal für einen Kunden erstellen
|
- Mehrere Lizenzen auf einmal für einen Kunden erstellen
|
||||||
|
|
||||||
**Implementierte Features:**
|
**Implementierte Features:**
|
||||||
@@ -1739,9 +1773,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- Erstellt Audit-Log Einträge
|
- Erstellt Audit-Log Einträge
|
||||||
- Gibt detaillierten Migrationsbericht aus
|
- Gibt detaillierten Migrationsbericht aus
|
||||||
|
|
||||||
**Neue Dateien:**
|
**Hinweis:**
|
||||||
- `v2_adminpanel/test_data_resources.sql` - Testdaten für Resource Pool
|
- Test-Daten und Migrations-Scripts wurden nach erfolgreicher Anwendung gelöscht
|
||||||
- `v2_adminpanel/migrate_existing_licenses.sql` - Migration für bestehende Lizenzen
|
|
||||||
|
|
||||||
**Status:**
|
**Status:**
|
||||||
- ✅ Resource Pool System vollständig implementiert und dokumentiert
|
- ✅ Resource Pool System vollständig implementiert und dokumentiert
|
||||||
@@ -1752,9 +1785,7 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- ✅ Test-Daten und Migration bereitgestellt
|
- ✅ Test-Daten und Migration bereitgestellt
|
||||||
|
|
||||||
**Nächste Schritte:**
|
**Nächste Schritte:**
|
||||||
1. Test-Daten einspielen: `psql -U adminuser -d meinedatenbank -f test_data_resources.sql`
|
1. License Server API implementieren (Hauptaufgabe)
|
||||||
2. Migration ausführen: `psql -U adminuser -d meinedatenbank -f migrate_existing_licenses.sql`
|
|
||||||
3. License Server API implementieren (Hauptaufgabe)
|
|
||||||
|
|
||||||
### 2025-06-09: Bugfix - Resource Pool Tabellen fehlten
|
### 2025-06-09: Bugfix - Resource Pool Tabellen fehlten
|
||||||
|
|
||||||
@@ -1769,9 +1800,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- Docker Container verwendeten noch die alte Datenbankstruktur
|
- Docker Container verwendeten noch die alte Datenbankstruktur
|
||||||
|
|
||||||
**Lösung:**
|
**Lösung:**
|
||||||
1. Separates Script `create_resource_tables.sql` erstellt
|
1. Separates Script erstellt und manuell in der Datenbank ausgeführt
|
||||||
2. Script manuell in der Datenbank ausgeführt
|
2. Alle 4 Resource-Tabellen erfolgreich erstellt:
|
||||||
3. Alle 4 Resource-Tabellen erfolgreich erstellt:
|
|
||||||
- resource_pools
|
- resource_pools
|
||||||
- resource_history
|
- resource_history
|
||||||
- resource_metrics
|
- resource_metrics
|
||||||
@@ -1784,7 +1814,7 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
|
|
||||||
**Empfehlung für Neuinstallationen:**
|
**Empfehlung für Neuinstallationen:**
|
||||||
- Bei frischer Installation funktioniert alles automatisch
|
- Bei frischer Installation funktioniert alles automatisch
|
||||||
- Bei bestehenden Installationen: `create_resource_tables.sql` ausführen
|
- Bei bestehenden Installationen: Resource-Tabellen manuell hinzufügen
|
||||||
|
|
||||||
### 2025-06-09: Navigation vereinfacht
|
### 2025-06-09: Navigation vereinfacht
|
||||||
|
|
||||||
@@ -1857,8 +1887,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- **Lösung**: Korrekte Einrückung wiederhergestellt
|
- **Lösung**: Korrekte Einrückung wiederhergestellt
|
||||||
- **Status**: ✅ Behoben
|
- **Status**: ✅ Behoben
|
||||||
|
|
||||||
### Neue Dateien erstellt heute:
|
### Hinweis:
|
||||||
1. `v2_adminpanel/test_data_resources.sql` - 800 Test-Ressourcen
|
- Test-Daten-Scripts wurden nach erfolgreicher Anwendung gelöscht
|
||||||
|
|
||||||
### 2025-06-09: Bugfix - Resource Quarantäne Modal
|
### 2025-06-09: Bugfix - Resource Quarantäne Modal
|
||||||
|
|
||||||
@@ -2061,7 +2091,7 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- `qrcode[pil]` - QR-Code-Generierung
|
- `qrcode[pil]` - QR-Code-Generierung
|
||||||
|
|
||||||
**Migration:**
|
**Migration:**
|
||||||
- Script `migrate_users.py` erstellt für Migration existierender Benutzer
|
- Migrations-Script für existierende Benutzer erstellt und angewendet
|
||||||
- Erhält bestehende Credentials aus Environment-Variablen
|
- Erhält bestehende Credentials aus Environment-Variablen
|
||||||
- Erstellt Datenbank-Einträge mit gehashten Passwörtern
|
- Erstellt Datenbank-Einträge mit gehashten Passwörtern
|
||||||
|
|
||||||
@@ -2069,7 +2099,6 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- `v2_adminpanel/init.sql` - Users-Tabelle hinzugefügt
|
- `v2_adminpanel/init.sql` - Users-Tabelle hinzugefügt
|
||||||
- `v2_adminpanel/requirements.txt` - Neue Dependencies
|
- `v2_adminpanel/requirements.txt` - Neue Dependencies
|
||||||
- `v2_adminpanel/app.py` - Auth-Funktionen und neue Routen
|
- `v2_adminpanel/app.py` - Auth-Funktionen und neue Routen
|
||||||
- `v2_adminpanel/migrate_users.py` - Migrations-Script (neu)
|
|
||||||
- `v2_adminpanel/templates/base.html` - Profil-Link hinzugefügt
|
- `v2_adminpanel/templates/base.html` - Profil-Link hinzugefügt
|
||||||
- `v2_adminpanel/templates/profile.html` - Profil-Seite (neu)
|
- `v2_adminpanel/templates/profile.html` - Profil-Seite (neu)
|
||||||
- `v2_adminpanel/templates/verify_2fa.html` - 2FA-Verifizierung (neu)
|
- `v2_adminpanel/templates/verify_2fa.html` - 2FA-Verifizierung (neu)
|
||||||
@@ -2085,10 +2114,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
**Durchgeführte Aufgaben:**
|
**Durchgeführte Aufgaben:**
|
||||||
|
|
||||||
1. **Überflüssige SQL-Dateien gelöscht:**
|
1. **Überflüssige SQL-Dateien gelöscht:**
|
||||||
- `create_resource_tables.sql` - War nur für Migrations nötig
|
- Migrations-Scripts - Waren nur für einmalige Anwendung nötig
|
||||||
- `migrate_existing_licenses.sql` - Keine alten Installationen vorhanden
|
- Test-Daten-Scripts - Nach Anwendung nicht mehr benötigt
|
||||||
- `sample_data.sql` - Testdaten nicht mehr benötigt
|
|
||||||
- `test_data_resources.sql` - Testdaten nicht mehr benötigt
|
|
||||||
|
|
||||||
2. **Journal aktualisiert:**
|
2. **Journal aktualisiert:**
|
||||||
- Veraltete Todo-Liste korrigiert (viele Features bereits implementiert)
|
- Veraltete Todo-Liste korrigiert (viele Features bereits implementiert)
|
||||||
@@ -2133,35 +2160,15 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
|
|||||||
- Responsive Design für alle Bildschirmgrößen
|
- Responsive Design für alle Bildschirmgrößen
|
||||||
- Print-optimiertes Layout für Backup-Codes
|
- Print-optimiertes Layout für Backup-Codes
|
||||||
|
|
||||||
**Geänderte Dateien:**
|
**Hinweis:**
|
||||||
- `v2_adminpanel/create_users_table.sql` - SQL für Users-Tabelle (temporär)
|
- Users-Tabelle wurde manuell erstellt (Script danach gelöscht)
|
||||||
|
|
||||||
### 2025-06-09: Journal-Umstrukturierung
|
### 2025-06-09: Journal-Bereinigung
|
||||||
|
|
||||||
**Durchgeführte Änderungen:**
|
**Durchgeführte Änderungen:**
|
||||||
|
- Todo-Listen und Status-Informationen entfernt
|
||||||
1. **Dokumentation aufgeteilt:**
|
- Fokus auf chronologische Dokumentation der Änderungen
|
||||||
- `JOURNAL.md` - Enthält nur noch chronologische Änderungen (wie ein Tagebuch)
|
- Veraltete Dateien und Scripts dokumentiert als gelöscht
|
||||||
- `THE_ROAD_SO_FAR.md` - Neues Dokument mit aktuellem Status und Roadmap
|
|
||||||
|
|
||||||
2. **THE_ROAD_SO_FAR.md erstellt mit:**
|
|
||||||
- Aktueller Status (was läuft bereits)
|
|
||||||
- Nächste Schritte (Priorität Hoch)
|
|
||||||
- Offene Aufgaben (Priorität Mittel)
|
|
||||||
- Nice-to-have Features
|
|
||||||
- Bekannte Probleme
|
|
||||||
- Deployment-Hinweise
|
|
||||||
|
|
||||||
3. **JOURNAL.md bereinigt:**
|
|
||||||
- Todo-Listen entfernt (jetzt in THE_ROAD_SO_FAR.md)
|
|
||||||
- Nur noch chronologische Einträge
|
|
||||||
- Fokus auf "Was wurde gemacht" statt "Was muss gemacht werden"
|
|
||||||
|
|
||||||
**Vorteile der Aufteilung:**
|
|
||||||
- Journal bleibt übersichtlich und wächst linear
|
|
||||||
- Status und Todos sind immer aktuell an einem Ort
|
|
||||||
- Klare Trennung zwischen Historie und Planung
|
|
||||||
- Einfacher für neue Entwickler einzusteigen
|
|
||||||
|
|
||||||
### 2025-06-09: Nginx Config angepasst
|
### 2025-06-09: Nginx Config angepasst
|
||||||
|
|
||||||
@@ -2226,9 +2233,8 @@ docker-compose up -d
|
|||||||
- Alt: `AF-202506F-V55Y-9DWE-GL5G`
|
- Alt: `AF-202506F-V55Y-9DWE-GL5G`
|
||||||
- Neu: `AF-F-202506-V55Y-9DWE-GL5G`
|
- Neu: `AF-F-202506-V55Y-9DWE-GL5G`
|
||||||
|
|
||||||
**Geänderte Dateien:**
|
**Hinweis:**
|
||||||
- `v2_adminpanel/migrate_license_keys.sql` - Migrations-Script (temporär)
|
- Migrations-Scripts wurden nach erfolgreicher Anwendung gelöscht
|
||||||
- `v2_adminpanel/fix_license_keys.sql` - Korrektur-Script (temporär)
|
|
||||||
|
|
||||||
**Status:** ✅ Alle Lizenzschlüssel erfolgreich migriert
|
**Status:** ✅ Alle Lizenzschlüssel erfolgreich migriert
|
||||||
|
|
||||||
@@ -2286,7 +2292,7 @@ Master-Detail View mit 2-Spalten Layout implementiert
|
|||||||
|
|
||||||
**Status:** ✅ Grundfunktionalität implementiert und funktionsfähig
|
**Status:** ✅ Grundfunktionalität implementiert und funktionsfähig
|
||||||
|
|
||||||
### 2025-06-09: Kombinierte Ansicht - Fertigstellung und TODOs aktualisiert
|
### 2025-06-09: Kombinierte Ansicht - Fertigstellung
|
||||||
|
|
||||||
**Abgeschlossen:**
|
**Abgeschlossen:**
|
||||||
- Phase 1-3 der kombinierten Kunden-Lizenz-Ansicht vollständig implementiert
|
- Phase 1-3 der kombinierten Kunden-Lizenz-Ansicht vollständig implementiert
|
||||||
@@ -2296,11 +2302,6 @@ Master-Detail View mit 2-Spalten Layout implementiert
|
|||||||
- Quick-Actions für Copy und Toggle Status
|
- Quick-Actions für Copy und Toggle Status
|
||||||
- Integration in alle relevanten Seiten
|
- Integration in alle relevanten Seiten
|
||||||
|
|
||||||
**THE_ROAD_SO_FAR.md aktualisiert:**
|
|
||||||
- Kombinierte Ansicht als "Erledigt" markiert
|
|
||||||
- Von "In Arbeit" zu "Abgeschlossen" verschoben
|
|
||||||
- Status dokumentiert
|
|
||||||
|
|
||||||
**Verbesserung gegenüber vorher:**
|
**Verbesserung gegenüber vorher:**
|
||||||
- Kein Hin-und-Her-Springen mehr zwischen Seiten
|
- Kein Hin-und-Her-Springen mehr zwischen Seiten
|
||||||
- Kontext bleibt erhalten beim Arbeiten mit Kunden
|
- Kontext bleibt erhalten beim Arbeiten mit Kunden
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
# Refactoring Issues - Blueprint Migration
|
|
||||||
|
|
||||||
## Zusammenfassung
|
|
||||||
|
|
||||||
Die Blueprint-Migration wurde zurückgesetzt, da sie zu viele Breaking Changes verursachte.
|
|
||||||
|
|
||||||
## Identifizierte Probleme
|
|
||||||
|
|
||||||
### 1. Schema-Inkonsistenzen
|
|
||||||
Die Blueprint-Code geht von einem anderen Datenbankschema aus als tatsächlich existiert:
|
|
||||||
|
|
||||||
#### Sessions-Tabelle
|
|
||||||
**Erwartet von Blueprints:**
|
|
||||||
- `license_key` (direkte Spalte)
|
|
||||||
- `username`
|
|
||||||
- `computer_name`
|
|
||||||
- `hardware_id`
|
|
||||||
- `device_id`
|
|
||||||
- `app_version`
|
|
||||||
- `active` (statt `is_active`)
|
|
||||||
- `login_time` (statt `started_at`)
|
|
||||||
- `logout_time` (statt `ended_at`)
|
|
||||||
- `last_activity` (statt `last_heartbeat`)
|
|
||||||
|
|
||||||
**Tatsächliches Schema:**
|
|
||||||
- `license_id` (Foreign Key zu licenses)
|
|
||||||
- `session_id`
|
|
||||||
- `ip_address`
|
|
||||||
- `user_agent`
|
|
||||||
- `started_at`
|
|
||||||
- `last_heartbeat`
|
|
||||||
- `ended_at`
|
|
||||||
- `is_active`
|
|
||||||
|
|
||||||
### 2. Falsche SQL-JOINs
|
|
||||||
Über 20+ falsche JOINs in verschiedenen Blueprint-Dateien:
|
|
||||||
- Falsch: `JOIN sessions s ON l.license_key = s.license_key`
|
|
||||||
- Richtig: `JOIN sessions s ON l.id = s.license_id`
|
|
||||||
|
|
||||||
Betroffene Dateien:
|
|
||||||
- `export_routes.py` (5 Stellen)
|
|
||||||
- `api_routes.py` (4 Stellen)
|
|
||||||
- `session_routes.py` (6 Stellen)
|
|
||||||
- `customer_routes.py` (2 Stellen)
|
|
||||||
|
|
||||||
### 3. Fehlende Funktionen
|
|
||||||
- `models.py`: 5 Funktionen fehlten
|
|
||||||
- `utils/export.py`: `create_batch_export()` fehlte
|
|
||||||
|
|
||||||
## Empfohlenes Vorgehen
|
|
||||||
|
|
||||||
### Option 1: Schrittweise Migration (Empfohlen)
|
|
||||||
1. **Schema-Analyse**: Vollständige Dokumentation des aktuellen DB-Schemas
|
|
||||||
2. **Blueprint-Anpassung**: Code an tatsächliches Schema anpassen
|
|
||||||
3. **Test-Suite**: Umfassende Tests vor Migration schreiben
|
|
||||||
4. **Einzelne Blueprints**: Einen Blueprint nach dem anderen migrieren
|
|
||||||
|
|
||||||
### Option 2: Schema-Anpassung
|
|
||||||
1. **Neue Spalten**: Alle erwarteten Spalten zur DB hinzufügen
|
|
||||||
2. **Daten-Migration**: Bestehende Daten migrieren
|
|
||||||
3. **Kompatibilitäts-Layer**: Views oder Trigger für Rückwärtskompatibilität
|
|
||||||
|
|
||||||
### Option 3: Neu-Implementation
|
|
||||||
1. **Sauberer Schnitt**: Blueprints von Grund auf neu schreiben
|
|
||||||
2. **Aktuelles Schema**: Code basierend auf tatsächlichem Schema
|
|
||||||
3. **Keine Assumptions**: Jede Spalte explizit prüfen
|
|
||||||
|
|
||||||
## Lessons Learned
|
|
||||||
|
|
||||||
1. **Keine Annahmen über Schema**: Immer das tatsächliche Schema prüfen
|
|
||||||
2. **Inkrementelle Migration**: Große Refactorings in kleine Schritte aufteilen
|
|
||||||
3. **Tests zuerst**: Umfassende Tests vor strukturellen Änderungen
|
|
||||||
4. **Rollback-Plan**: Immer Backups vor größeren Änderungen
|
|
||||||
|
|
||||||
## Aktueller Status
|
|
||||||
|
|
||||||
- ✅ Anwendung läuft wieder mit ursprünglichem Code
|
|
||||||
- ✅ Alle Funktionen sind wiederhergestellt
|
|
||||||
- ⚠️ Blueprint-Migration wurde zurückgesetzt
|
|
||||||
- 📋 Detaillierte Problembeschreibung für zukünftige Versuche dokumentiert
|
|
||||||
|
|
||||||
## Nächste Schritte
|
|
||||||
|
|
||||||
1. Vollständige Schema-Dokumentation erstellen
|
|
||||||
2. Test-Suite für aktuelle Funktionalität schreiben
|
|
||||||
3. Migration in kleineren, testbaren Schritten planen
|
|
||||||
4. Jeden Blueprint einzeln mit Tests migrieren
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
# Refactoring Status - v2-Docker Admin Panel
|
|
||||||
|
|
||||||
**Stand: 16.06.2025**
|
|
||||||
|
|
||||||
## Phase 1: Verifizierung und Tests ✅ ABGESCHLOSSEN
|
|
||||||
|
|
||||||
### Durchgeführte Arbeiten:
|
|
||||||
1. **Blueprint-Verifizierung**
|
|
||||||
- Alle 9 Blueprints sind erstellt und registriert
|
|
||||||
- 66 Routes erfolgreich auf Blueprints verteilt
|
|
||||||
- Keine aktiven @app.route mehr in app.py
|
|
||||||
|
|
||||||
2. **Backup erstellt**
|
|
||||||
- Code-Backup: `./backups/refactoring_20250616_223724/`
|
|
||||||
- Mehrere Zwischenstände gesichert
|
|
||||||
|
|
||||||
## Phase 2: Code-Cleanup ✅ ABGESCHLOSSEN
|
|
||||||
|
|
||||||
### Durchgeführte Arbeiten:
|
|
||||||
|
|
||||||
1. **Auskommentierte Routes entfernt** (428 Zeilen)
|
|
||||||
- 60 kommentierte Route-Blöcke entfernt
|
|
||||||
- Dateigröße um 11.2% reduziert
|
|
||||||
- Backup: `app.py.backup_before_cleanup_20250616_223919`
|
|
||||||
|
|
||||||
2. **Redundante Funktionen bereinigt** (289+ Zeilen)
|
|
||||||
- `verify_recaptcha` Funktion entfernt (bereits in utils/recaptcha.py)
|
|
||||||
- Duplizierte Auth-Funktionen entfernt (136 Zeilen):
|
|
||||||
- `profile()`, `change_password()`, `setup_2fa()`
|
|
||||||
- `enable_2fa()`, `disable_2fa()`, `heartbeat()`
|
|
||||||
- Ungenutzte Imports entfernt: `requests`, `random`, `base64`
|
|
||||||
- Fehlenden Import hinzugefügt: `io`
|
|
||||||
|
|
||||||
3. **Scheduler-Modul extrahiert**
|
|
||||||
- Neues Modul: `scheduler.py`
|
|
||||||
- Backup-Scheduling-Logik ausgelagert
|
|
||||||
- Saubere Trennung der Verantwortlichkeiten
|
|
||||||
|
|
||||||
4. **Logging-Konfiguration zentralisiert**
|
|
||||||
- Logging-Einstellungen nach config.py verschoben
|
|
||||||
- Einheitliche Konfiguration
|
|
||||||
|
|
||||||
### Ergebnis:
|
|
||||||
- **app.py reduziert**: Von 4,475 auf 3,859 Zeilen (-616 Zeilen / -13.8%)
|
|
||||||
- **Bessere Struktur**: Klarere Trennung von Funktionalitäten
|
|
||||||
- **Wartbarkeit erhöht**: Redundanzen eliminiert
|
|
||||||
|
|
||||||
## Nächste Schritte: Phase 3 - URL-Präfixe
|
|
||||||
|
|
||||||
### Geplante Arbeiten:
|
|
||||||
1. **URL-Präfixe implementieren**
|
|
||||||
- Blueprint-Registrierung mit Präfixen
|
|
||||||
- z.B. `/auth/login` statt `/login`
|
|
||||||
|
|
||||||
2. **Legacy-Redirects einrichten**
|
|
||||||
- Alte URLs auf neue umleiten
|
|
||||||
- Rückwärtskompatibilität gewährleisten
|
|
||||||
|
|
||||||
3. **Template-URLs aktualisieren**
|
|
||||||
- Alle `url_for()` Aufrufe anpassen
|
|
||||||
- JavaScript/AJAX URLs aktualisieren
|
|
||||||
|
|
||||||
### Vorbereitungen für Phase 3:
|
|
||||||
- Feature-Flag vorbereiten: `USE_URL_PREFIX`
|
|
||||||
- Liste aller Templates mit url_for() erstellen
|
|
||||||
- Redirect-Mapping planen
|
|
||||||
|
|
||||||
## Rollback-Optionen
|
|
||||||
|
|
||||||
Falls nötig, können folgende Backups verwendet werden:
|
|
||||||
1. Vollständiges Backup: `./backups/refactoring_20250616_223724/`
|
|
||||||
2. Vor Route-Cleanup: `app.py.backup_before_cleanup_20250616_223919`
|
|
||||||
3. Vor Funktions-Cleanup: `app.py.backup_before_function_cleanup_20250616_224041`
|
|
||||||
|
|
||||||
## Metriken
|
|
||||||
|
|
||||||
| Metrik | Vorher | Nachher | Reduktion |
|
|
||||||
|--------|--------|---------|-----------|
|
|
||||||
| app.py Zeilen | 4,475 | 3,859 | -616 (-13.8%) |
|
|
||||||
| Dateigröße | 167 KB | 144 KB | -23 KB (-13.8%) |
|
|
||||||
| Route-Definitionen | 66 in app.py | 0 in app.py | 100% migriert |
|
|
||||||
| Blueprints | 0 | 9 | +9 |
|
|
||||||
| Module | 6 | 8 | +2 (routes/, scheduler.py) |
|
|
||||||
|
|
||||||
## Status: ✅ Phase 1 & 2 erfolgreich abgeschlossen
|
|
||||||
|
|
||||||
Die ersten beiden Phasen des Refactorings wurden erfolgreich durchgeführt. Die Anwendung ist nun besser strukturiert und wartbarer. Als nächstes folgt die Implementierung von URL-Präfixen für eine noch klarere API-Struktur.
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
# THE ROAD SO FAR
|
|
||||||
**Stand: 09.06.2025, 18:13 MEZ**
|
|
||||||
|
|
||||||
## 🚀 Aktueller Status
|
|
||||||
|
|
||||||
### ✅ Fertiggestellt
|
|
||||||
|
|
||||||
**Admin Panel (v2_adminpanel)**
|
|
||||||
- Vollständig funktionsfähig unter https://admin-panel-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
||||||
- Kundenverwaltung mit UTF-8 Support
|
|
||||||
- Lizenzverwaltung (Erstellen, Bearbeiten, Löschen)
|
|
||||||
- 2FA-Authentifizierung
|
|
||||||
- Session-Management mit Audit-Log
|
|
||||||
- Backup-System (verschlüsselt)
|
|
||||||
- IP-Blocking & Rate-Limiting
|
|
||||||
- Resource-Pool Management (Domains, IPs, Telefonnummern)
|
|
||||||
- Export-Funktionen (Excel, CSV)
|
|
||||||
- Batch-Lizenz-Erstellung
|
|
||||||
- Testdaten-Management
|
|
||||||
|
|
||||||
**Datenbank (PostgreSQL)**
|
|
||||||
- Alle Tabellen erstellt und optimiert
|
|
||||||
- UTF-8 Support vollständig
|
|
||||||
- Timezone Europe/Berlin
|
|
||||||
- Backup-Routinen implementiert
|
|
||||||
|
|
||||||
**Reverse Proxy (Nginx)**
|
|
||||||
- SSL-Terminierung aktiv
|
|
||||||
- Security Headers konfiguriert
|
|
||||||
- Rate Limiting implementiert
|
|
||||||
- DynDNS-Routing funktioniert
|
|
||||||
|
|
||||||
### ❌ Noch nicht implementiert
|
|
||||||
|
|
||||||
**Lizenzserver API (v2_lizenzserver)**
|
|
||||||
- Container läuft nur als Placeholder
|
|
||||||
- Keine API-Endpoints implementiert
|
|
||||||
- 502 Bad Gateway bei Zugriff auf https://api-software-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
||||||
|
|
||||||
## 📋 TODO-Liste
|
|
||||||
|
|
||||||
### 1. Admin Panel UI-Verbesserungen
|
|
||||||
|
|
||||||
#### ✅ Erledigt: Konsolidierung Kunden-Lizenz-Verwaltung
|
|
||||||
**Problem**:
|
|
||||||
- Kombinierte Ansicht `/customers-licenses` existiert, hat aber Formatierungs- und Funktionsprobleme
|
|
||||||
- Drei separate Views (`/customers`, `/licenses`, `/customers-licenses`) führen zu Redundanz
|
|
||||||
- Inkonsistente User Experience
|
|
||||||
|
|
||||||
**Geplante Lösung**: Vollständige Konsolidierung in einer zentralen Ansicht
|
|
||||||
- `/customers-licenses` wird zur Hauptansicht für alle Kunden- und Lizenzoperationen
|
|
||||||
- Separate Views `/customers` und `/licenses` werden überflüssig
|
|
||||||
- Inline-Editing und Bulk-Operationen direkt in der kombinierten Ansicht
|
|
||||||
|
|
||||||
**Finaler Stand** (09.06.2025, 18:13):
|
|
||||||
- ✅ Bootstrap Icons in base.html eingebunden
|
|
||||||
- ✅ JavaScript-Fehler behoben (copyToClipboard, Header-Update)
|
|
||||||
- ✅ Container-Styling vereinheitlicht (container statt container-fluid)
|
|
||||||
- ✅ Bootstrap JavaScript für Modal-Support hinzugefügt
|
|
||||||
- ✅ Navigation angepasst - alle Links zeigen auf kombinierte Ansicht
|
|
||||||
- ✅ Redirects implementiert - `/customers` und `/licenses` leiten auf `/customers-licenses` um
|
|
||||||
- ✅ Emojis und Button-Text vereinheitlicht (👥 Kunden & Lizenzen)
|
|
||||||
- ✅ show_test Parameter wird beim Navigieren und Editieren beibehalten
|
|
||||||
|
|
||||||
**Umgesetzte Lösung**:
|
|
||||||
1. Bootstrap Icons CSS und JS Libraries eingebunden
|
|
||||||
2. JavaScript-Fehler in customers_licenses.html behoben:
|
|
||||||
- copyToClipboard mit event.currentTarget
|
|
||||||
- Header-Update beim AJAX-Kundenwechsel
|
|
||||||
- Modal-Funktionalität für "Neue Lizenz"
|
|
||||||
3. Design-Vereinheitlichung:
|
|
||||||
- Container mit py-5 padding wie andere Seiten
|
|
||||||
- Konsistente Emojis in Buttons und Titeln
|
|
||||||
- Export-Dropdown mit gleichen Icons
|
|
||||||
- Card-Styling mit Schatten
|
|
||||||
4. Testkunden-Filter Persistenz:
|
|
||||||
- Checkbox behält Status beim Neuladen
|
|
||||||
- show_test Parameter in allen URLs weitergegeben
|
|
||||||
- Redirects nach Editieren behalten Parameter bei
|
|
||||||
5. Dashboard-Navigation angepasst - Klicks auf Statistiken führen zur kombinierten Ansicht
|
|
||||||
6. Alte Routes mit Redirects versehen - kein Code-Duplikat mehr
|
|
||||||
|
|
||||||
**Status**: Die Konsolidierung ist vollständig abgeschlossen. Die kombinierte Ansicht ist jetzt die zentrale Stelle für alle Kunden- und Lizenzoperationen mit einheitlichem Design und voller Funktionalität.
|
|
||||||
|
|
||||||
#### Weitere geplante Features
|
|
||||||
- [ ] **Globale Suche**: Eine Suchbox für alles (Kunden, Lizenzen, Keys) mit Autocomplete
|
|
||||||
- [ ] **Expandable Rows**: Details in Tabelle ausklappen ohne Seitenwechsel
|
|
||||||
- [ ] **Batch-Import**: CSV/Excel Upload für Massen-Import mit Validierung
|
|
||||||
- [ ] **Timeline/Calendar View**: Kalenderansicht für Lizenz-Ablaufdaten
|
|
||||||
|
|
||||||
### 2. Lizenzserver-Implementation
|
|
||||||
- [ ] Flask-API erstellen
|
|
||||||
- [ ] Endpoints implementieren:
|
|
||||||
- [ ] `/api/v1/validate` - Lizenzkey-Validierung
|
|
||||||
- [ ] `/api/v1/version` - Versions-Check
|
|
||||||
- [ ] `/api/v1/heartbeat` - Session-Management
|
|
||||||
- [ ] `/api/v1/device/register` - Geräte-Registrierung
|
|
||||||
- [ ] `/api/v1/device/unregister` - Geräte-Abmeldung
|
|
||||||
- [ ] Datenbank-Schema erweitern (devices, heartbeats, api_logs)
|
|
||||||
- [ ] Rate-Limiting für API
|
|
||||||
- [ ] API-Key Authentication
|
|
||||||
|
|
||||||
### 3. Testing & Dokumentation
|
|
||||||
- [ ] API-Tests schreiben
|
|
||||||
- [ ] Integrationstests
|
|
||||||
- [ ] API-Dokumentation (OpenAPI/Swagger)
|
|
||||||
- [ ] Deployment-Guide aktualisieren
|
|
||||||
|
|
||||||
## 🎯 Nächste Schritte
|
|
||||||
|
|
||||||
1. **Priorität 1**: UI-Verbesserungen Admin Panel
|
|
||||||
- Kombinierte Ansicht für bessere UX
|
|
||||||
- Globale Suche für Effizienz
|
|
||||||
|
|
||||||
2. **Priorität 2**: Lizenzserver-API implementieren
|
|
||||||
- Basis-Flask-App aufsetzen
|
|
||||||
- Erste Endpoints (validate, version)
|
|
||||||
- Datenbank-Verbindung
|
|
||||||
|
|
||||||
3. **Priorität 3**: Testing & Härtung
|
|
||||||
- Umfassende Tests
|
|
||||||
- Security-Audit
|
|
||||||
- Performance-Optimierung
|
|
||||||
|
|
||||||
## 💡 Notizen für VPS-Migration
|
|
||||||
|
|
||||||
- Domain-Wechsel vorbereiten (Environment Variables)
|
|
||||||
- Feste IP statt DynDNS
|
|
||||||
- Backup-Strategie für Produktion
|
|
||||||
- Monitoring-Setup planen
|
|
||||||
- SSL-Zertifikate (Let's Encrypt)
|
|
||||||
- Firewall-Regeln dokumentieren
|
|
||||||
|
|
||||||
## 🔧 Entwicklungsumgebung
|
|
||||||
|
|
||||||
**Docker-Befehle:**
|
|
||||||
```bash
|
|
||||||
docker-compose down
|
|
||||||
docker-compose build
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
**Zugriff:**
|
|
||||||
- Admin Panel: https://admin-panel-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
||||||
- API (geplant): https://api-software-undso.z5m7q9dk3ah2v1plx6ju.com
|
|
||||||
|
|
||||||
**Test-Accounts:**
|
|
||||||
- rac00n / 1248163264
|
|
||||||
- w@rh@mm3r / Warhammer123!
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# Migration zu Passwort-Änderung und 2FA
|
|
||||||
|
|
||||||
## Übersicht
|
|
||||||
Das Admin Panel unterstützt jetzt Passwort-Änderungen und Zwei-Faktor-Authentifizierung (2FA). Um diese Features zu nutzen, müssen bestehende Benutzer migriert werden.
|
|
||||||
|
|
||||||
## Migration durchführen
|
|
||||||
|
|
||||||
1. **Container neu bauen** (für neue Dependencies):
|
|
||||||
```bash
|
|
||||||
docker-compose down
|
|
||||||
docker-compose build adminpanel
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Migration ausführen**:
|
|
||||||
```bash
|
|
||||||
docker exec -it v2_adminpanel python migrate_users.py
|
|
||||||
```
|
|
||||||
|
|
||||||
Dies erstellt Datenbankeinträge für die in der .env konfigurierten Admin-Benutzer.
|
|
||||||
|
|
||||||
## Nach der Migration
|
|
||||||
|
|
||||||
### Passwort ändern
|
|
||||||
1. Einloggen mit bisherigem Passwort
|
|
||||||
2. Klick auf "👤 Profil" in der Navigation
|
|
||||||
3. Neues Passwort eingeben (min. 8 Zeichen)
|
|
||||||
|
|
||||||
### 2FA aktivieren
|
|
||||||
1. Im Profil auf "2FA einrichten" klicken
|
|
||||||
2. QR-Code mit Google Authenticator oder Authy scannen
|
|
||||||
3. 6-stelligen Code eingeben
|
|
||||||
4. Backup-Codes sicher aufbewahren!
|
|
||||||
|
|
||||||
## Wichtige Hinweise
|
|
||||||
- Backup-Codes unbedingt speichern (Drucker, USB-Stick, etc.)
|
|
||||||
- Jeder Backup-Code kann nur einmal verwendet werden
|
|
||||||
- Bei Verlust des 2FA-Geräts können nur Backup-Codes helfen
|
|
||||||
|
|
||||||
## Rückwärtskompatibilität
|
|
||||||
- Benutzer aus .env funktionieren weiterhin
|
|
||||||
- Diese haben aber keinen Zugriff auf Profil-Features
|
|
||||||
- Migration ist erforderlich für neue Features
|
|
||||||
261
refactoring.md
261
refactoring.md
@@ -1,261 +0,0 @@
|
|||||||
# v2-Docker Admin Panel Refactoring
|
|
||||||
|
|
||||||
## Übersicht
|
|
||||||
|
|
||||||
Dieses Dokument beschreibt den aktuellen Stand des Refactorings der v2-Docker Admin Panel Anwendung und die geplanten nächsten Schritte.
|
|
||||||
|
|
||||||
### Ziele des Refactorings
|
|
||||||
- **Bessere Code-Organisation**: Aufteilung der monolithischen 5000+ Zeilen app.py
|
|
||||||
- **Wartbarkeit**: Modulare Struktur für einfachere Wartung und Erweiterungen
|
|
||||||
- **Testbarkeit**: Unabhängige Module können isoliert getestet werden
|
|
||||||
- **Skalierbarkeit**: Vorbereitung für zukünftige Features
|
|
||||||
|
|
||||||
## Phase 1: Modularisierung (✅ Abgeschlossen)
|
|
||||||
|
|
||||||
### Erreichte Verbesserungen
|
|
||||||
- **Code-Reduktion**: Von 5.021 auf 4.445 Zeilen (-576 Zeilen)
|
|
||||||
- **Klare Trennung**: Funktionalität in logische Module aufgeteilt
|
|
||||||
- **Wiederverwendbarkeit**: Zentrale Funktionen verfügbar
|
|
||||||
|
|
||||||
### Neue Struktur
|
|
||||||
|
|
||||||
```
|
|
||||||
v2_adminpanel/
|
|
||||||
├── app.py (Hauptanwendung, reduziert)
|
|
||||||
├── config.py (Zentrale Konfiguration)
|
|
||||||
├── db.py (Datenbank-Management)
|
|
||||||
├── models.py (Datenmodelle)
|
|
||||||
├── auth/
|
|
||||||
│ ├── decorators.py (Login-Required, Session-Management)
|
|
||||||
│ ├── password.py (Passwort-Hashing mit bcrypt)
|
|
||||||
│ ├── rate_limiting.py (IP-Blocking, Login-Versuche)
|
|
||||||
│ └── two_factor.py (TOTP, QR-Codes, Backup-Codes)
|
|
||||||
├── utils/
|
|
||||||
│ ├── audit.py (Audit-Logging)
|
|
||||||
│ ├── backup.py (Verschlüsselte Backups)
|
|
||||||
│ ├── export.py (Excel-Export Funktionen)
|
|
||||||
│ ├── license.py (Lizenzschlüssel-Generierung)
|
|
||||||
│ ├── network.py (IP-Ermittlung)
|
|
||||||
│ └── recaptcha.py (reCAPTCHA-Verifikation)
|
|
||||||
└── routes/
|
|
||||||
├── auth_routes.py (Blueprint vorbereitet)
|
|
||||||
└── admin_routes.py (Blueprint vorbereitet)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Implementierte Module
|
|
||||||
|
|
||||||
#### 1. Konfiguration (`config.py`)
|
|
||||||
- Alle Flask-Einstellungen
|
|
||||||
- Datenbank-Konfiguration
|
|
||||||
- Rate-Limiting Parameter
|
|
||||||
- Backup-Einstellungen
|
|
||||||
- reCAPTCHA Keys
|
|
||||||
|
|
||||||
#### 2. Datenbank (`db.py`)
|
|
||||||
- Connection Management mit Context Managers
|
|
||||||
- Helper-Funktionen für Queries
|
|
||||||
- Automatisches Commit/Rollback
|
|
||||||
- UTF-8 Encoding sichergestellt
|
|
||||||
|
|
||||||
#### 3. Authentication (`auth/`)
|
|
||||||
- **decorators.py**: Login-Required mit 5-Minuten Session-Timeout
|
|
||||||
- **password.py**: Sichere Passwort-Hashes mit bcrypt
|
|
||||||
- **two_factor.py**: TOTP-basierte 2FA mit Backup-Codes
|
|
||||||
- **rate_limiting.py**: Schutz vor Brute-Force-Angriffen
|
|
||||||
|
|
||||||
#### 4. Utilities (`utils/`)
|
|
||||||
- **audit.py**: Vollständiges Audit-Logging mit IP und User-Agent
|
|
||||||
- **backup.py**: Verschlüsselte PostgreSQL-Backups mit Fernet
|
|
||||||
- **license.py**: Lizenzschlüssel im Format AF-[F/T]-YYYYMM-XXXX-YYYY-ZZZZ
|
|
||||||
- **export.py**: Excel-Export für verschiedene Datentypen
|
|
||||||
- **network.py**: Client-IP Ermittlung hinter Nginx Proxy
|
|
||||||
- **recaptcha.py**: Google reCAPTCHA v2 Integration
|
|
||||||
|
|
||||||
## Phase 2: Blueprint-Architektur (⚠️ Teilweise implementiert)
|
|
||||||
|
|
||||||
### Erstellte Blueprints
|
|
||||||
|
|
||||||
#### 1. Auth Blueprint (`routes/auth_routes.py`)
|
|
||||||
Enthält alle authentifizierungsbezogenen Routes:
|
|
||||||
- `/login` - Login-Seite mit Rate-Limiting und reCAPTCHA
|
|
||||||
- `/logout` - Session-Beendigung
|
|
||||||
- `/verify-2fa` - 2FA-Verifizierung
|
|
||||||
- `/profile` - Benutzerprofil
|
|
||||||
- `/profile/change-password` - Passwort ändern
|
|
||||||
- `/profile/setup-2fa` - 2FA einrichten
|
|
||||||
- `/profile/enable-2fa` - 2FA aktivieren
|
|
||||||
- `/profile/disable-2fa` - 2FA deaktivieren
|
|
||||||
- `/heartbeat` - Session Keep-Alive
|
|
||||||
|
|
||||||
#### 2. Admin Blueprint (`routes/admin_routes.py`)
|
|
||||||
Enthält administrative Funktionen:
|
|
||||||
- `/` - Dashboard mit Statistiken
|
|
||||||
- `/audit` - Audit-Log Viewer
|
|
||||||
- `/backups` - Backup-Verwaltung
|
|
||||||
- `/backup/create` - Manuelles Backup
|
|
||||||
- `/backup/restore/<id>` - Backup wiederherstellen
|
|
||||||
- `/backup/download/<id>` - Backup herunterladen
|
|
||||||
- `/backup/delete/<id>` - Backup löschen
|
|
||||||
- `/security/blocked-ips` - Gesperrte IPs verwalten
|
|
||||||
- `/security/unblock-ip` - IP entsperren
|
|
||||||
- `/security/clear-attempts` - Login-Versuche zurücksetzen
|
|
||||||
|
|
||||||
### Aufgetretene Herausforderungen
|
|
||||||
|
|
||||||
1. **Route-Konflikte**: Doppelte Definitionen zwischen app.py und Blueprints
|
|
||||||
2. **Zirkuläre Imports**: Gegenseitige Abhängigkeiten zwischen Modulen
|
|
||||||
3. **URL-Referenzen**: `url_for()` muss Blueprint-Namen verwenden
|
|
||||||
|
|
||||||
## Nächste Schritte
|
|
||||||
|
|
||||||
### Option 1: Schrittweise Migration (⭐ Empfohlen)
|
|
||||||
```python
|
|
||||||
# Blueprints mit Präfixen registrieren
|
|
||||||
app.register_blueprint(auth_bp, url_prefix='/auth')
|
|
||||||
app.register_blueprint(admin_bp, url_prefix='/admin')
|
|
||||||
|
|
||||||
# Redirects von alten URLs
|
|
||||||
@app.route('/login')
|
|
||||||
def legacy_login():
|
|
||||||
return redirect(url_for('auth.login'))
|
|
||||||
```
|
|
||||||
|
|
||||||
**Vorteile:**
|
|
||||||
- Keine Breaking Changes
|
|
||||||
- Schrittweise Migration möglich
|
|
||||||
- Einfaches Rollback
|
|
||||||
|
|
||||||
### Option 2: Feature-Flag Ansatz
|
|
||||||
```python
|
|
||||||
if os.getenv('USE_BLUEPRINTS', 'false').lower() == 'true':
|
|
||||||
app.register_blueprint(auth_bp)
|
|
||||||
app.register_blueprint(admin_bp)
|
|
||||||
else:
|
|
||||||
# Alte Routes verwenden
|
|
||||||
from legacy_routes import *
|
|
||||||
```
|
|
||||||
|
|
||||||
### Option 3: Parallelbetrieb
|
|
||||||
- Separate Docker-Container für Test
|
|
||||||
- A/B Testing möglich
|
|
||||||
- Höherer Ressourcenverbrauch
|
|
||||||
|
|
||||||
## Verbleibende Aufgaben
|
|
||||||
|
|
||||||
### Phase 2 Fertigstellung
|
|
||||||
- [ ] License Blueprint (`routes/license_routes.py`)
|
|
||||||
- [ ] Customer Blueprint (`routes/customer_routes.py`)
|
|
||||||
- [ ] Resource Blueprint (`routes/resource_routes.py`)
|
|
||||||
- [ ] API Blueprint (`routes/api_routes.py`)
|
|
||||||
- [ ] Export Blueprint (`routes/export_routes.py`)
|
|
||||||
|
|
||||||
### Phase 3: Model Layer
|
|
||||||
- [ ] User Model mit ORM-ähnlicher Struktur
|
|
||||||
- [ ] License Model mit Validierung
|
|
||||||
- [ ] Customer Model mit Beziehungen
|
|
||||||
- [ ] Resource Model mit Status-Management
|
|
||||||
|
|
||||||
### Phase 4: Service Layer
|
|
||||||
- [ ] Business Logic von Routes trennen
|
|
||||||
- [ ] Transaktions-Management
|
|
||||||
- [ ] Caching-Layer
|
|
||||||
|
|
||||||
### Phase 5: Testing
|
|
||||||
- [ ] Unit Tests für alle Module
|
|
||||||
- [ ] Integration Tests für Blueprints
|
|
||||||
- [ ] End-to-End Tests für kritische Workflows
|
|
||||||
- [ ] Performance Tests
|
|
||||||
|
|
||||||
## Migrations-Strategie
|
|
||||||
|
|
||||||
### 1. Vorbereitung
|
|
||||||
```bash
|
|
||||||
# Backup erstellen
|
|
||||||
docker-compose exec admin-panel python -c "from utils.backup import create_backup; create_backup()"
|
|
||||||
|
|
||||||
# Test-Umgebung aufsetzen
|
|
||||||
docker-compose -f docker-compose.test.yml up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Schrittweise Aktivierung
|
|
||||||
1. Auth-Routes migrieren (Login kritisch)
|
|
||||||
2. Admin-Routes migrieren (Dashboard)
|
|
||||||
3. API-Routes (externe Abhängigkeiten)
|
|
||||||
4. Restliche Routes
|
|
||||||
|
|
||||||
### 3. Monitoring
|
|
||||||
- Fehler-Logs überwachen
|
|
||||||
- Performance-Metriken vergleichen
|
|
||||||
- User-Feedback sammeln
|
|
||||||
|
|
||||||
## Performance-Überlegungen
|
|
||||||
|
|
||||||
### Aktuelle Messwerte
|
|
||||||
- App-Start: ~2-3 Sekunden
|
|
||||||
- Route-Response: <100ms
|
|
||||||
- Datenbankqueries: Optimiert mit Indizes
|
|
||||||
|
|
||||||
### Nach Refactoring erwartet
|
|
||||||
- Schnellerer App-Start durch lazy loading
|
|
||||||
- Bessere Parallelisierung möglich
|
|
||||||
- Einfacheres Caching pro Modul
|
|
||||||
|
|
||||||
## Sicherheits-Verbesserungen
|
|
||||||
|
|
||||||
1. **Rate-Limiting**: Zentral in eigenem Modul
|
|
||||||
2. **Session-Management**: Strikte 5-Minuten Timeouts
|
|
||||||
3. **2FA**: Vollständig implementiert mit Backup-Codes
|
|
||||||
4. **Audit-Trail**: Lückenlose Protokollierung
|
|
||||||
|
|
||||||
## Entwickler-Hinweise
|
|
||||||
|
|
||||||
### Neue Features hinzufügen
|
|
||||||
1. Modul in entsprechendem Verzeichnis erstellen
|
|
||||||
2. In passenden Blueprint integrieren
|
|
||||||
3. Tests schreiben
|
|
||||||
4. Dokumentation aktualisieren
|
|
||||||
|
|
||||||
### Debugging
|
|
||||||
```python
|
|
||||||
# Logging ist überall verfügbar
|
|
||||||
import logging
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.info("Debug information")
|
|
||||||
|
|
||||||
# Audit-Log für wichtige Aktionen
|
|
||||||
from utils.audit import log_audit
|
|
||||||
log_audit('ACTION', 'entity_type', entity_id, old_values, new_values)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Datenbank-Zugriff
|
|
||||||
```python
|
|
||||||
# Immer Context Manager verwenden
|
|
||||||
from db import get_db_connection, get_db_cursor
|
|
||||||
|
|
||||||
with get_db_connection() as conn:
|
|
||||||
with get_db_cursor(conn) as cur:
|
|
||||||
cur.execute("SELECT * FROM users WHERE id = %s", (user_id,))
|
|
||||||
user = cur.fetchone()
|
|
||||||
```
|
|
||||||
|
|
||||||
## Zeitplan
|
|
||||||
|
|
||||||
### Q1 2024
|
|
||||||
- [x] Phase 1: Modularisierung
|
|
||||||
- [ ] Phase 2: Blueprints vollständig
|
|
||||||
- [ ] Phase 3: Model Layer
|
|
||||||
|
|
||||||
### Q2 2024
|
|
||||||
- [ ] Phase 4: Service Layer
|
|
||||||
- [ ] Phase 5: Testing
|
|
||||||
- [ ] Production Release
|
|
||||||
|
|
||||||
## Kontakt
|
|
||||||
|
|
||||||
Bei Fragen zum Refactoring:
|
|
||||||
- GitHub Issues: https://github.com/anthropics/claude-code/issues
|
|
||||||
- Dokumentation: Dieses Dokument
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Letzte Aktualisierung: 2024-06-16
|
|
||||||
@@ -338,7 +338,7 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="bg-light">
|
<body class="bg-light">
|
||||||
<nav class="navbar navbar-dark bg-dark navbar-expand-lg">
|
<nav class="navbar navbar-dark bg-dark navbar-expand-lg sticky-top">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<a href="{{ url_for('admin.dashboard') }}" class="navbar-brand text-decoration-none">🎛️ AccountForger - Admin Panel</a>
|
<a href="{{ url_for('admin.dashboard') }}" class="navbar-brand text-decoration-none">🎛️ AccountForger - Admin Panel</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren