import os import json from datetime import timedelta # Hardcodierte Konfiguration SECRET_KEY = "7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F" DATABASE_PATH = "database/myp.db" TAPO_USERNAME = "till.tomczak@mercedes-benz.com" TAPO_PASSWORD = "744563017196A" # Drucker-Konfiguration PRINTERS = { "Printer 1": {"ip": "192.168.0.100"}, "Printer 2": {"ip": "192.168.0.101"}, "Printer 3": {"ip": "192.168.0.102"}, "Printer 4": {"ip": "192.168.0.103"}, "Printer 5": {"ip": "192.168.0.104"}, "Printer 6": {"ip": "192.168.0.106"} } # Logging-Konfiguration LOG_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 FLASK_FALLBACK_PORT = 80 FLASK_DEBUG = True SESSION_LIFETIME = timedelta(days=7) # SSL-Konfiguration SSL_ENABLED = True SSL_CERT_PATH = "instance/ssl/myp.crt" SSL_KEY_PATH = "instance/ssl/myp.key" SSL_HOSTNAME = "raspberrypi" # Scheduler-Konfiguration SCHEDULER_INTERVAL = 60 # Sekunden SCHEDULER_ENABLED = True # Datenbank-Konfiguration DB_ENGINE = f"sqlite:///{DATABASE_PATH}" 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 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() # Prüfen, ob wir uns im Entwicklungsmodus befinden if FLASK_DEBUG: print("SSL-Zertifikate nicht gefunden. Erstelle selbstsignierte Zertifikate...") # Pfad zum create_ssl_cert.sh-Skript ermitteln script_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "install", "create_ssl_cert.sh") # Ausführungsrechte setzen if os.path.exists(script_path): os.system(f"chmod +x {script_path}") # Zertifikate erstellen mit spezifischem Hostnamen os.system(f"{script_path} -c {SSL_CERT_PATH} -k {SSL_KEY_PATH} -h {SSL_HOSTNAME}") else: print(f"WARNUNG: SSL-Zertifikat-Generator nicht gefunden: {script_path}") 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)