Schwarzer Navbar scrollt mit

Dieser Commit ist enthalten in:
2025-06-18 20:42:35 +02:00
Ursprung 18c556a790
Commit b529ba183c
7 geänderte Dateien mit 83 neuen und 709 gelöschten Zeilen

Datei anzeigen

@@ -1,6 +1,40 @@
# 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
- **Datenbank-Schema erweitert**:
@@ -21,8 +55,8 @@
- API-Endpoints liefern Geräteinformationen
- **Migration**:
- Skript `migrate_device_limit.sql` erstellt
- Setzt device_limit = 3 für alle bestehenden Lizenzen
- Device-Limit wird automatisch bei neuen Lizenzen gesetzt
- Standard device_limit = 3 für alle Lizenzen
### Vollständig implementiert:
✅ 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
### 2025-06-06 - Journal erstellt
### 2025-01-06 - Journal erstellt
- Initialer Projektstand dokumentiert
- Aufgabenliste priorisiert
- 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)
- PostgreSQL Verbindung mit UTF-8 client_encoding
- 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")
- Email mit Umlauten testen
### 2025-06-06 - Lizenzübersicht implementiert
### 2025-01-06 - Lizenzübersicht implementiert
- Neue Route `/licenses` für Lizenzübersicht
- SQL-Query mit JOIN zwischen licenses und customers
- 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
- 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
- Bearbeitungsformular mit vorausgefüllten Werten
- 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
- Bestätigungsdialog vor dem Löschen
### 2025-06-06 - Kundenverwaltung implementiert
### 2025-01-06 - Kundenverwaltung implementiert
- Komplette CRUD-Funktionalität für Kunden
- Übersicht zeigt Anzahl aktiver/gesamter Lizenzen pro Kunde
- 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)
- 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
- Statistik-Karten mit wichtigen Kennzahlen
- 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
- Übersicht der neuesten Aktivitäten
### 2025-06-06 - Suchfunktion implementiert
### 2025-01-06 - Suchfunktion implementiert
- Volltextsuche für Lizenzen und Kunden
- Case-insensitive Suche mit LIKE-Operator
- 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
- 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
- Pagination für große Datenmengen (20 Einträge pro Seite)
- 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
- Responsive Bootstrap-Komponenten
### 2025-06-06 - Session-Tracking implementiert
### 2025-01-06 - Session-Tracking implementiert
- Neue Tabelle für Session-Verwaltung
- Anzeige aktiver und beendeter Sessions
- 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:**
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
- Formatierte Ausgabe mit deutschen Datumsformaten
- 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
- 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
- Filterbare Übersicht mit Pagination
- 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
- 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
- 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
- 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
- Backup-Historie mit Download und Wiederherstellung
- 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
- 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
- SSL-Zertifikate von IONOS mit vollständiger Certificate Chain integriert
- 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
- ✅ Netzwerk-Setup abgeschlossen
### 2025-06-07 - Projekt-Cleanup durchgeführt
### 2025-01-07 - Projekt-Cleanup durchgeführt
- Redundante und überflüssige Dateien entfernt
- 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)
- 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
- 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
- ✅ 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
- 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
### 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
- 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
- Ä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
- 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
- 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
- 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
- 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
- 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
- ✅ 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
**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
- ✅ Cookie-Sicherheitseinstellungen optimiert
### 2025-06-07 - CAPTCHA Backend-Validierung implementiert
### 2025-01-07 - CAPTCHA Backend-Validierung implementiert
- Google reCAPTCHA v2 Backend-Verifizierung hinzugefügt
**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
- 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
**Implementiertes Format:**
@@ -923,7 +957,7 @@ Die Session-Daten werden erst gefüllt, wenn der License Server API implementier
- ✅ Audit-Log-Integration
- ✅ 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
**Implementierte Features:**
@@ -1739,9 +1773,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
- Erstellt Audit-Log Einträge
- Gibt detaillierten Migrationsbericht aus
**Neue Dateien:**
- `v2_adminpanel/test_data_resources.sql` - Testdaten für Resource Pool
- `v2_adminpanel/migrate_existing_licenses.sql` - Migration für bestehende Lizenzen
**Hinweis:**
- Test-Daten und Migrations-Scripts wurden nach erfolgreicher Anwendung gelöscht
**Status:**
- ✅ 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
**Nächste Schritte:**
1. Test-Daten einspielen: `psql -U adminuser -d meinedatenbank -f test_data_resources.sql`
2. Migration ausführen: `psql -U adminuser -d meinedatenbank -f migrate_existing_licenses.sql`
3. License Server API implementieren (Hauptaufgabe)
1. License Server API implementieren (Hauptaufgabe)
### 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
**Lösung:**
1. Separates Script `create_resource_tables.sql` erstellt
2. Script manuell in der Datenbank ausgeführt
3. Alle 4 Resource-Tabellen erfolgreich erstellt:
1. Separates Script erstellt und manuell in der Datenbank ausgeführt
2. Alle 4 Resource-Tabellen erfolgreich erstellt:
- resource_pools
- resource_history
- resource_metrics
@@ -1784,7 +1814,7 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
**Empfehlung für Neuinstallationen:**
- 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
@@ -1857,8 +1887,8 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder
- **Lösung**: Korrekte Einrückung wiederhergestellt
- **Status**: ✅ Behoben
### Neue Dateien erstellt heute:
1. `v2_adminpanel/test_data_resources.sql` - 800 Test-Ressourcen
### Hinweis:
- Test-Daten-Scripts wurden nach erfolgreicher Anwendung gelöscht
### 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
**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
- 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/requirements.txt` - Neue Dependencies
- `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/profile.html` - Profil-Seite (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:**
1. **Überflüssige SQL-Dateien gelöscht:**
- `create_resource_tables.sql` - War nur für Migrations nötig
- `migrate_existing_licenses.sql` - Keine alten Installationen vorhanden
- `sample_data.sql` - Testdaten nicht mehr benötigt
- `test_data_resources.sql` - Testdaten nicht mehr benötigt
- Migrations-Scripts - Waren nur für einmalige Anwendung nötig
- Test-Daten-Scripts - Nach Anwendung nicht mehr benötigt
2. **Journal aktualisiert:**
- 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
- Print-optimiertes Layout für Backup-Codes
**Geänderte Dateien:**
- `v2_adminpanel/create_users_table.sql` - SQL für Users-Tabelle (temporär)
**Hinweis:**
- Users-Tabelle wurde manuell erstellt (Script danach gelöscht)
### 2025-06-09: Journal-Umstrukturierung
### 2025-06-09: Journal-Bereinigung
**Durchgeführte Änderungen:**
1. **Dokumentation aufgeteilt:**
- `JOURNAL.md` - Enthält nur noch chronologische Änderungen (wie ein Tagebuch)
- `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
- Todo-Listen und Status-Informationen entfernt
- Fokus auf chronologische Dokumentation der Änderungen
- Veraltete Dateien und Scripts dokumentiert als gelöscht
### 2025-06-09: Nginx Config angepasst
@@ -2226,9 +2233,8 @@ docker-compose up -d
- Alt: `AF-202506F-V55Y-9DWE-GL5G`
- Neu: `AF-F-202506-V55Y-9DWE-GL5G`
**Geänderte Dateien:**
- `v2_adminpanel/migrate_license_keys.sql` - Migrations-Script (temporär)
- `v2_adminpanel/fix_license_keys.sql` - Korrektur-Script (temporär)
**Hinweis:**
- Migrations-Scripts wurden nach erfolgreicher Anwendung gelöscht
**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
### 2025-06-09: Kombinierte Ansicht - Fertigstellung und TODOs aktualisiert
### 2025-06-09: Kombinierte Ansicht - Fertigstellung
**Abgeschlossen:**
- 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
- 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:**
- Kein Hin-und-Her-Springen mehr zwischen Seiten
- Kontext bleibt erhalten beim Arbeiten mit Kunden

Datei anzeigen

@@ -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

Datei anzeigen

@@ -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.

Datei anzeigen

@@ -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!

Datei anzeigen

@@ -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

Datei anzeigen

@@ -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

Datei anzeigen

@@ -338,7 +338,7 @@
</style>
</head>
<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">
<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">