From 00d45dd38df2434e7af533e40394f4c9fcf93794 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Mon, 16 Jun 2025 18:08:59 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Improved=20backend=20log=20manag?= =?UTF-8?q?ement=20structure=20&=20added=20utility=20settings=20?= =?UTF-8?q?=F0=9F=A7=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.claude/settings.local.json | 6 +- backend/__pycache__/app.cpython-313.pyc | Bin 74744 -> 76901 bytes backend/app.py | 50 +---- backend/database/myp.db-shm | Bin 32768 -> 32768 bytes backend/logs/app/app.log | 3 + backend/logs/core_system/core_system.log | 2 + .../logs/data_management/data_management.log | 2 + .../hardware_integration.log | 4 + .../job_queue_system/job_queue_system.log | 2 + .../monitoring_analytics.log | 2 + backend/logs/scheduler/scheduler.log | 1 + .../logs/security_suite/security_suite.log | 2 + backend/logs/startup/startup.log | 9 + .../logs/tapo_controller/tapo_controller.log | 1 + .../tapo_status_manager.log | 1 + .../utilities_collection.log | 2 + backend/logs/windows_fixes/windows_fixes.log | 2 + backend/utils/settings.py | 192 ++++++++++++++++++ 18 files changed, 233 insertions(+), 48 deletions(-) create mode 100644 backend/utils/settings.py diff --git a/backend/.claude/settings.local.json b/backend/.claude/settings.local.json index 52aac0259..8dbf45f04 100644 --- a/backend/.claude/settings.local.json +++ b/backend/.claude/settings.local.json @@ -36,7 +36,11 @@ "Bash(rg:*)", "Bash(grep:*)", "Bash(grep:*)", - "Bash(chmod:*)" + "Bash(chmod:*)", + "Bash(node --version)", + "Bash(npm --version)", + "Bash(python:*)", + "Bash(pip3 install:*)" ], "deny": [] } diff --git a/backend/__pycache__/app.cpython-313.pyc b/backend/__pycache__/app.cpython-313.pyc index eaf45ac76841aaf9c9acb2b785a02ef2926fb22d..b3f6ee4e8c841bd9b90dc8a5fcedcfa9462abca6 100644 GIT binary patch delta 6486 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 HYNY=U=goHe delta 4907 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 delta 56 vcmZo@U}|V!;*@x#%K!q(6FKDto9|wk=E@zt9$AnLA~-QliIHJrV|_gUx~CAU diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index 44c5787c8..25cee056a 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -41547,3 +41547,6 @@ WHERE users.id = ? 2025-06-16 17:45:06 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... 2025-06-16 17:45:06 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt 2025-06-16 17:45:06 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: 'BackgroundTaskScheduler' object has no attribute 'shutdown' +2025-06-16 18:04:07 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: ./database/myp.db +2025-06-16 18:04:07 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-16 18:04:07 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert diff --git a/backend/logs/core_system/core_system.log b/backend/logs/core_system/core_system.log index 702609b81..b894b3b9c 100644 --- a/backend/logs/core_system/core_system.log +++ b/backend/logs/core_system/core_system.log @@ -254,3 +254,5 @@ 2025-06-16 17:44:29 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) 2025-06-16 17:44:56 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert 2025-06-16 17:44:56 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-16 18:04:07 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-16 18:04:07 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) diff --git a/backend/logs/data_management/data_management.log b/backend/logs/data_management/data_management.log index b4d511baf..f524b6be3 100644 --- a/backend/logs/data_management/data_management.log +++ b/backend/logs/data_management/data_management.log @@ -599,3 +599,5 @@ 2025-06-16 17:44:29 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-16 17:44:56 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert 2025-06-16 17:44:56 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-16 18:04:07 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-16 18:04:07 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/hardware_integration/hardware_integration.log b/backend/logs/hardware_integration/hardware_integration.log index 1800328df..738d19af5 100644 --- a/backend/logs/hardware_integration/hardware_integration.log +++ b/backend/logs/hardware_integration/hardware_integration.log @@ -2476,3 +2476,7 @@ 2025-06-16 17:44:56 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ Printer Monitor initialisiert 2025-06-16 17:44:56 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ Hardware Integration Module initialisiert 2025-06-16 17:44:56 - [hardware_integration] hardware_integration - [INFO] INFO - 📊 Massive Konsolidierung: 2 Dateien → 1 Datei (50% Reduktion) +2025-06-16 18:04:07 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ PyP100 (TP-Link Tapo) verfügbar +2025-06-16 18:04:07 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ Printer Monitor initialisiert +2025-06-16 18:04:07 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ Hardware Integration Module initialisiert +2025-06-16 18:04:07 - [hardware_integration] hardware_integration - [INFO] INFO - 📊 Massive Konsolidierung: 2 Dateien → 1 Datei (50% Reduktion) diff --git a/backend/logs/job_queue_system/job_queue_system.log b/backend/logs/job_queue_system/job_queue_system.log index 1ac98d9e9..9a08f2ea2 100644 --- a/backend/logs/job_queue_system/job_queue_system.log +++ b/backend/logs/job_queue_system/job_queue_system.log @@ -1179,3 +1179,5 @@ 2025-06-16 17:44:57 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) 2025-06-16 17:45:05 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) 2025-06-16 17:45:06 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-16 18:04:07 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-16 18:04:07 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) diff --git a/backend/logs/monitoring_analytics/monitoring_analytics.log b/backend/logs/monitoring_analytics/monitoring_analytics.log index 4ecf0f3b0..aae3e03a3 100644 --- a/backend/logs/monitoring_analytics/monitoring_analytics.log +++ b/backend/logs/monitoring_analytics/monitoring_analytics.log @@ -599,3 +599,5 @@ 2025-06-16 17:44:30 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-16 17:44:57 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert 2025-06-16 17:44:57 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-16 18:04:10 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-16 18:04:10 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index 582d7b9d0..9f43e5443 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -2106,3 +2106,4 @@ 2025-06-16 17:44:56 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True 2025-06-16 17:44:57 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet 2025-06-16 17:44:57 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-16 18:04:07 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True diff --git a/backend/logs/security_suite/security_suite.log b/backend/logs/security_suite/security_suite.log index 7d87768fa..28bf0dd4d 100644 --- a/backend/logs/security_suite/security_suite.log +++ b/backend/logs/security_suite/security_suite.log @@ -899,3 +899,5 @@ 2025-06-16 17:44:56 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert 2025-06-16 17:44:56 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-16 17:44:57 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-16 18:04:07 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-16 18:04:07 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index c1432cbee..f69230ae8 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -2364,3 +2364,12 @@ 2025-06-16 17:44:57 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-16 17:44:57 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-16 17:44:57 - [startup] startup - [INFO] INFO - ================================================== +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - ================================================== +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-16T18:04:10.535096 +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-16 18:04:10 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/tapo_controller/tapo_controller.log b/backend/logs/tapo_controller/tapo_controller.log index 2e6aa9ff1..b18bb90c4 100644 --- a/backend/logs/tapo_controller/tapo_controller.log +++ b/backend/logs/tapo_controller/tapo_controller.log @@ -2888,3 +2888,4 @@ 2025-06-16 17:44:25 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert 2025-06-16 17:44:29 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert 2025-06-16 17:44:56 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert +2025-06-16 18:04:07 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert diff --git a/backend/logs/tapo_status_manager/tapo_status_manager.log b/backend/logs/tapo_status_manager/tapo_status_manager.log index b0fe671f7..7e172db7c 100644 --- a/backend/logs/tapo_status_manager/tapo_status_manager.log +++ b/backend/logs/tapo_status_manager/tapo_status_manager.log @@ -266,3 +266,4 @@ 2025-06-16 17:44:25 - [tapo_status_manager] tapo_status_manager - [INFO] INFO - TapoStatusManager mit Session-Caching initialisiert 2025-06-16 17:44:29 - [tapo_status_manager] tapo_status_manager - [INFO] INFO - TapoStatusManager mit Session-Caching initialisiert 2025-06-16 17:44:56 - [tapo_status_manager] tapo_status_manager - [INFO] INFO - TapoStatusManager mit Session-Caching initialisiert +2025-06-16 18:04:07 - [tapo_status_manager] tapo_status_manager - [INFO] INFO - TapoStatusManager mit Session-Caching initialisiert diff --git a/backend/logs/utilities_collection/utilities_collection.log b/backend/logs/utilities_collection/utilities_collection.log index b5e864453..c465781e9 100644 --- a/backend/logs/utilities_collection/utilities_collection.log +++ b/backend/logs/utilities_collection/utilities_collection.log @@ -769,3 +769,5 @@ 2025-06-16 17:44:29 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) 2025-06-16 17:44:56 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert 2025-06-16 17:44:56 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-16 18:04:07 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-16 18:04:07 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index b0425f146..a139effc7 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -257,3 +257,5 @@ 2025-06-16 17:44:29 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet 2025-06-16 17:44:56 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... 2025-06-16 17:44:56 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-16 18:04:07 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-16 18:04:07 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet diff --git a/backend/utils/settings.py b/backend/utils/settings.py new file mode 100644 index 000000000..f40356490 --- /dev/null +++ b/backend/utils/settings.py @@ -0,0 +1,192 @@ +import os +import json +from datetime import timedelta + +def get_env_variable(name: str, default: str = None) -> str: + """ + Holt eine Umgebungsvariable oder gibt den Standardwert zurück. + + Args: + name: Name der Umgebungsvariable + default: Standardwert, falls die Variable nicht gesetzt ist + + Returns: + str: Wert der Umgebungsvariable oder Standardwert + """ + return os.environ.get(name, default) + +# Hardcodierte Konfiguration +SECRET_KEY = "7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F" + +# Dynamische Pfade basierend auf dem aktuellen Arbeitsverzeichnis +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # backend/app +PROJECT_ROOT = os.path.dirname(BASE_DIR) # Projektroot +DATABASE_PATH = os.path.join(PROJECT_ROOT, "database", "myp.db") # ./database/myp.db + +# ===== SMART PLUG KONFIGURATION ===== +# TP-Link Tapo P110 Standardkonfiguration +TAPO_USERNAME = "till.tomczak@mercedes-benz.com" +TAPO_PASSWORD = "744563017196A" + +# Automatische Steckdosen-Erkennung aktivieren +TAPO_AUTO_DISCOVERY = True + +# Standard-Steckdosen-IPs (Mercedes-Benz TBA Marienfelde - 6 feste Arbeitsplätze) +DEFAULT_TAPO_IPS = [ + "192.168.0.100", # 3D-Drucker 1 - TBA Marienfelde + "192.168.0.101", # 3D-Drucker 2 - TBA Marienfelde + "192.168.0.102", # 3D-Drucker 3 - TBA Marienfelde + "192.168.0.103", # 3D-Drucker 4 - TBA Marienfelde + "192.168.0.104", # 3D-Drucker 5 - TBA Marienfelde + "192.168.0.106" # 3D-Drucker 6 - TBA Marienfelde +] + +# Timeout-Konfiguration für Tapo-Verbindungen +TAPO_TIMEOUT = 10 # Sekunden +TAPO_RETRY_COUNT = 3 # Anzahl Wiederholungsversuche + +# Drucker-Konfiguration mit korrekten IPs +PRINTERS = { + "3D-Drucker 1 - Halle A": {"ip": "192.168.1.101", "plug_ip": "192.168.1.201"}, + "3D-Drucker 2 - Halle A": {"ip": "192.168.1.102", "plug_ip": "192.168.1.202"}, + "3D-Drucker 3 - Halle B": {"ip": "192.168.1.103", "plug_ip": "192.168.1.203"}, + "3D-Drucker 4 - Halle B": {"ip": "192.168.1.104", "plug_ip": "192.168.1.204"}, + "3D-Drucker 5 - Labor": {"ip": "192.168.1.105", "plug_ip": "192.168.1.205"}, + "3D-Drucker 6 - Werkstatt": {"ip": "192.168.1.106", "plug_ip": "192.168.1.206"} +} + +# Logging-Konfiguration +LOG_DIR = os.path.join(BASE_DIR, "logs") +LOG_SUBDIRS = ["app", "scheduler", "auth", "jobs", "printers", "errors"] +LOG_LEVEL = "INFO" +LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" +LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" + +# Flask-Konfiguration +FLASK_HOST = "0.0.0.0" +FLASK_PORT = 443 # Geändert von 443 auf 8443 (nicht-privilegierter Port) +FLASK_FALLBACK_PORT = 8080 # Geändert von 80 auf 8080 (nicht-privilegierter Port) +FLASK_DEBUG = True +SESSION_LIFETIME = timedelta(hours=2) # Reduziert von 7 Tagen auf 2 Stunden für bessere Sicherheit + +# Upload-Konfiguration +UPLOAD_FOLDER = os.path.join(PROJECT_ROOT, "uploads") # ./uploads im Projektroot +ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'gcode', '3mf', 'stl'} +MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16MB Maximum-Dateigröße +MAX_FILE_SIZE = 16 * 1024 * 1024 # 16MB Maximum-Dateigröße für Drag & Drop System + +# Umgebungskonfiguration +ENVIRONMENT = get_env_variable("MYP_ENVIRONMENT", "development") + +# SSL-Konfiguration +SSL_ENABLED = get_env_variable("MYP_SSL_ENABLED", "True").lower() in ("true", "1", "yes") +SSL_CERT_PATH = os.path.join(BASE_DIR, "certs", "myp.crt") +SSL_KEY_PATH = os.path.join(BASE_DIR, "certs", "myp.key") +SSL_HOSTNAME = get_env_variable("MYP_SSL_HOSTNAME", "localhost") + +# Scheduler-Konfiguration +SCHEDULER_INTERVAL = 60 # Sekunden +SCHEDULER_ENABLED = True + +# Datenbank-Konfiguration +DB_ENGINE = f"sqlite:///{DATABASE_PATH}" + +# Mercedes-Benz TBA spezifische Konfiguration +FIXED_PRINTER_COUNT = 6 # Immer 6 feste Arbeitsplätze anzeigen +ALWAYS_SHOW_ALL_SOCKETS = True # Alle 6 Steckdosen immer anzeigen, auch wenn offline + +def get_log_file(category: str) -> str: + """ + Gibt den Pfad zur Log-Datei für eine bestimmte Kategorie zurück. + + Args: + category: Log-Kategorie (app, scheduler, auth, jobs, printers, errors) + + Returns: + str: Pfad zur Log-Datei + """ + if category not in LOG_SUBDIRS: + category = "app" + + return os.path.join(LOG_DIR, category, f"{category}.log") + +def ensure_log_directories(): + """Erstellt alle erforderlichen Log-Verzeichnisse.""" + os.makedirs(LOG_DIR, exist_ok=True) + for subdir in LOG_SUBDIRS: + os.makedirs(os.path.join(LOG_DIR, subdir), exist_ok=True) + +def ensure_database_directory(): + """Erstellt das Datenbank-Verzeichnis.""" + db_dir = os.path.dirname(DATABASE_PATH) + if db_dir: + os.makedirs(db_dir, exist_ok=True) + +def ensure_ssl_directory(): + """Erstellt das SSL-Verzeichnis, falls es nicht existiert.""" + ssl_dir = os.path.dirname(SSL_CERT_PATH) + if ssl_dir and not os.path.exists(ssl_dir): + os.makedirs(ssl_dir, exist_ok=True) + +def ensure_upload_directory(): + """Erstellt das Upload-Verzeichnis, falls es nicht existiert.""" + if not os.path.exists(UPLOAD_FOLDER): + os.makedirs(UPLOAD_FOLDER, exist_ok=True) + +def get_ssl_context(): + """ + Gibt den SSL-Kontext für Flask zurück, wenn SSL aktiviert ist. + + Returns: + tuple oder None: Tuple mit Zertifikat- und Schlüsselpfad, wenn SSL aktiviert ist, sonst None + """ + if not SSL_ENABLED: + return None + + # Wenn Zertifikate nicht existieren, diese automatisch erstellen + if not os.path.exists(SSL_CERT_PATH) or not os.path.exists(SSL_KEY_PATH): + ensure_ssl_directory() + + # Im Entwicklungsmodus versuchen wir, einfache Zertifikate zu erstellen + if FLASK_DEBUG: + print("SSL-Zertifikate nicht gefunden. Erstelle einfache selbstsignierte Zertifikate...") + try: + # Einfache Zertifikate mit Python erstellen + create_simple_ssl_cert() + + # Prüfen, ob die Zertifikate erfolgreich erstellt wurden + if not os.path.exists(SSL_CERT_PATH) or not os.path.exists(SSL_KEY_PATH): + print("Konnte keine SSL-Zertifikate erstellen.") + return None + + except Exception as e: + print(f"Fehler beim Erstellen der SSL-Zertifikate: {e}") + return None + else: + print("WARNUNG: SSL-Zertifikate nicht gefunden und Nicht-Debug-Modus. SSL wird deaktiviert.") + return None + + return (SSL_CERT_PATH, SSL_KEY_PATH) + +def create_simple_ssl_cert(): + """ + Erstellt ein Mercedes-Benz SSL-Zertifikat mit dem neuen SSL-Manager. + """ + try: + # Verwende den neuen SSL-Manager + from utils.ssl_manager import ssl_manager + success = ssl_manager.generate_mercedes_certificate() + + if success: + print(f"Mercedes-Benz SSL-Zertifikat erfolgreich erstellt: {SSL_CERT_PATH}") + return True + else: + print("Fehler beim Erstellen des Mercedes-Benz SSL-Zertifikats") + return None + + except ImportError as e: + print(f"SSL-Manager nicht verfügbar: {e}") + return None + except Exception as e: + print(f"Fehler beim Erstellen der SSL-Zertifikate: {e}") + return None \ No newline at end of file