diff --git a/JOURNAL.md b/JOURNAL.md index 4356a2f..3d86d64 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -2158,4 +2158,49 @@ Ein Pool-System für Domains, IPv4-Adressen und Telefonnummern, wobei bei jeder - `v2_adminpanel/templates/setup_2fa.html` - Neues Step-by-Step Design - `v2_adminpanel/templates/backup_codes.html` - Modernisiertes Layout -**Status:** ✅ Abgeschlossen - Login funktioniert, UI im konsistenten Design \ No newline at end of file +**Status:** ✅ Abgeschlossen - Login funktioniert, UI im konsistenten Design + +### 2025-06-09: Lizenzschlüssel-Format geändert + +**Änderung:** +- Altes Format: `AF-YYYYMMFT-XXXX-YYYY-ZZZZ` (z.B. AF-202506F-V55Y-9DWE-GL5G) +- Neues Format: `AF-F-YYYYMM-XXXX-YYYY-ZZZZ` (z.B. AF-F-202506-V55Y-9DWE-GL5G) + +**Vorteile:** +- Klarere Struktur mit separatem Typ-Indikator +- Einfacher zu lesen und zu verstehen +- Typ (F/T) sofort im zweiten Block erkennbar + +**Geänderte Dateien:** +- `v2_adminpanel/app.py`: + - `generate_license_key()` - Generiert Keys im neuen Format + - `validate_license_key()` - Validiert Keys mit neuem Regex-Pattern +- `v2_adminpanel/templates/index.html`: + - Placeholder und Pattern für Input-Feld angepasst + - JavaScript charAt() Position für Typ-Prüfung korrigiert +- `v2_adminpanel/templates/batch_form.html`: + - Vorschau-Format für Batch-Generierung angepasst + +**Hinweis:** Alte Keys im bisherigen Format bleiben ungültig. Bei Bedarf könnte eine Migration oder Dual-Support implementiert werden. + +**Status:** ✅ Implementiert + +### 2025-06-09: Datenbank-Migration der Lizenzschlüssel + +**Durchgeführt:** +- Alle bestehenden Lizenzschlüssel in der Datenbank auf das neue Format migriert +- 18 Lizenzschlüssel erfolgreich konvertiert (16 Full, 2 Test) + +**Migration:** +- Von: `AF-YYYYMMFT-XXXX-YYYY-ZZZZ` +- Nach: `AF-F-YYYYMM-XXXX-YYYY-ZZZZ` + +**Beispiele:** +- 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) + +**Status:** ✅ Alle Lizenzschlüssel erfolgreich migriert \ No newline at end of file diff --git a/v2_adminpanel/app.py b/v2_adminpanel/app.py index 58ff0b0..ca23bb2 100644 --- a/v2_adminpanel/app.py +++ b/v2_adminpanel/app.py @@ -641,12 +641,12 @@ def verify_recaptcha(response): def generate_license_key(license_type='full'): """ - Generiert einen Lizenzschlüssel im Format: AF-YYYYMMFT-XXXX-YYYY-ZZZZ + Generiert einen Lizenzschlüssel im Format: AF-F-YYYYMM-XXXX-YYYY-ZZZZ AF = Account Factory (Produktkennung) + F/T = F für Fullversion, T für Testversion YYYY = Jahr MM = Monat - FT = F für Fullversion, T für Testversion XXXX-YYYY-ZZZZ = Zufällige alphanumerische Zeichen """ # Erlaubte Zeichen (ohne verwirrende wie 0/O, 1/I/l) @@ -664,21 +664,21 @@ def generate_license_key(license_type='full'): parts.append(part) # Key zusammensetzen - key = f"AF-{date_part}{type_char}-{parts[0]}-{parts[1]}-{parts[2]}" + key = f"AF-{type_char}-{date_part}-{parts[0]}-{parts[1]}-{parts[2]}" return key def validate_license_key(key): """ Validiert das License Key Format - Erwartet: AF-YYYYMMFT-XXXX-YYYY-ZZZZ + Erwartet: AF-F-YYYYMM-XXXX-YYYY-ZZZZ oder AF-T-YYYYMM-XXXX-YYYY-ZZZZ """ if not key: return False - # Pattern für das spezifische Format - # AF- (fest) + 6 Ziffern (YYYYMM) + F oder T + - + 4 Zeichen + - + 4 Zeichen + - + 4 Zeichen - pattern = r'^AF-\d{6}[FT]-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$' + # Pattern für das neue Format + # AF- (fest) + F oder T + - + 6 Ziffern (YYYYMM) + - + 4 Zeichen + - + 4 Zeichen + - + 4 Zeichen + pattern = r'^AF-[FT]-\d{6}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$' # Großbuchstaben für Vergleich return bool(re.match(pattern, key.upper())) diff --git a/v2_adminpanel/fix_license_keys.sql b/v2_adminpanel/fix_license_keys.sql new file mode 100644 index 0000000..da6c431 --- /dev/null +++ b/v2_adminpanel/fix_license_keys.sql @@ -0,0 +1,13 @@ +-- Fix für die fehlerhafte Migration - entfernt doppelte Bindestriche +UPDATE licenses +SET license_key = REPLACE(license_key, 'AF--', 'AF-') +WHERE license_key LIKE 'AF--%'; + +UPDATE licenses +SET license_key = REPLACE(license_key, '6--', '6-') +WHERE license_key LIKE '%6--%'; + +-- Zeige die korrigierten Keys +SELECT id, license_key, license_type +FROM licenses +ORDER BY id; \ No newline at end of file diff --git a/v2_adminpanel/migrate_license_keys.sql b/v2_adminpanel/migrate_license_keys.sql new file mode 100644 index 0000000..6ff91e6 --- /dev/null +++ b/v2_adminpanel/migrate_license_keys.sql @@ -0,0 +1,54 @@ +-- Migration der Lizenzschlüssel vom alten Format zum neuen Format +-- Alt: AF-YYYYMMFT-XXXX-YYYY-ZZZZ +-- Neu: AF-F-YYYYMM-XXXX-YYYY-ZZZZ + +-- Backup der aktuellen Schlüssel erstellen (für Sicherheit) +CREATE TEMP TABLE license_backup AS +SELECT id, license_key FROM licenses; + +-- Update für Fullversion Keys (F) +UPDATE licenses +SET license_key = + CONCAT( + SUBSTRING(license_key, 1, 3), -- 'AF-' + '-F-', + SUBSTRING(license_key, 4, 6), -- 'YYYYMM' + '-', + SUBSTRING(license_key, 11) -- Rest des Keys + ) +WHERE license_key LIKE 'AF-%F-%' + AND license_type = 'full' + AND license_key NOT LIKE 'AF-F-%'; -- Nicht bereits migriert + +-- Update für Testversion Keys (T) +UPDATE licenses +SET license_key = + CONCAT( + SUBSTRING(license_key, 1, 3), -- 'AF-' + '-T-', + SUBSTRING(license_key, 4, 6), -- 'YYYYMM' + '-', + SUBSTRING(license_key, 11) -- Rest des Keys + ) +WHERE license_key LIKE 'AF-%T-%' + AND license_type = 'test' + AND license_key NOT LIKE 'AF-T-%'; -- Nicht bereits migriert + +-- Zeige die Änderungen +SELECT + b.license_key as old_key, + l.license_key as new_key, + l.license_type +FROM licenses l +JOIN license_backup b ON l.id = b.id +WHERE b.license_key != l.license_key +ORDER BY l.id; + +-- Anzahl der migrierten Keys +SELECT + COUNT(*) as total_migrated, + SUM(CASE WHEN license_type = 'full' THEN 1 ELSE 0 END) as full_licenses, + SUM(CASE WHEN license_type = 'test' THEN 1 ELSE 0 END) as test_licenses +FROM licenses l +JOIN license_backup b ON l.id = b.id +WHERE b.license_key != l.license_key; \ No newline at end of file diff --git a/v2_adminpanel/templates/batch_form.html b/v2_adminpanel/templates/batch_form.html index 279515f..3c06e71 100644 --- a/v2_adminpanel/templates/batch_form.html +++ b/v2_adminpanel/templates/batch_form.html @@ -173,7 +173,7 @@
Es werden 10 Lizenzen im folgenden Format generiert:
Die Keys werden automatisch eindeutig generiert und in der Datenbank gespeichert.