[30388f42] Infrastructure Hardening: Repaired CE/Connector DB schema, fixed frontend styling build, implemented robust echo shield in worker v2.1.1, and integrated Lead Engine into gateway.

This commit is contained in:
2026-03-07 14:08:42 +00:00
parent 35c30bc39a
commit d1b77fd2f6
415 changed files with 24100 additions and 13301 deletions

View File

@@ -9,21 +9,17 @@ und das Spalten-Mapping für das Google Sheet.
import os
import re
import logging
# ==============================================================================
# 1. GLOBALE KONSTANTEN UND DATEIPFADE
# ==============================================================================
# --- Dateipfade (NEU: Feste Pfade für Docker-Betrieb) ---
# Das Basisverzeichnis ist im Docker-Kontext immer /app.
BASE_DIR = "/app"
CREDENTIALS_FILE = os.path.join(BASE_DIR, "service_account.json")
API_KEY_FILE = os.path.join(BASE_DIR, "gemini_api_key.txt")
SERP_API_KEY_FILE = os.path.join(BASE_DIR, "serpapikey.txt")
GENDERIZE_API_KEY_FILE = os.path.join(BASE_DIR, "genderize_API_Key.txt")
# API keys are now read from environment variables directly. File paths are deprecated.
API_KEY_FILE = None
SERP_API_KEY_FILE = None
GENDERIZE_API_KEY_FILE = None
BRANCH_MAPPING_FILE = None
LOG_DIR = os.path.join(BASE_DIR, "Log_from_docker") # Log in den gemounteten Ordner schreiben
@@ -501,19 +497,18 @@ class Config:
@classmethod
def load_api_keys(cls):
"""Laedt API-Schluessel aus den definierten Dateien."""
"""Laedt API-Schluessel aus Umgebungsvariablen."""
logger = logging.getLogger(__name__)
logger.info("Lade API-Schluessel...")
cls.API_KEYS['openai'] = cls._load_key_from_file(API_KEY_FILE)
cls.API_KEYS['serpapi'] = cls._load_key_from_file(SERP_API_KEY_FILE)
cls.API_KEYS['genderize'] = cls._load_key_from_file(GENDERIZE_API_KEY_FILE)
logger.info("Lade API-Schluessel aus Umgebungsvariablen...")
cls.API_KEYS['gemini'] = os.getenv("GEMINI_API_KEY")
cls.API_KEYS['openai'] = os.getenv("OPENAI_API_KEY") # Fallback/Compatibility
cls.API_KEYS['serpapi'] = os.getenv("SERP_API_KEY")
cls.API_KEYS['genderize'] = os.getenv("GENDERIZE_API_KEY")
if cls.API_KEYS.get('openai'):
# Hier nehmen wir an, dass 'openai' für Gemini verwendet wird (Legacy)
# Falls in helpers.py direkt auf 'gemini' zugegriffen wird, müsste das hier auch gesetzt werden.
logger.info("Gemini API Key (via 'openai' slot) erfolgreich geladen.")
if cls.API_KEYS.get('gemini') or cls.API_KEYS.get('openai'):
logger.info("Gemini/OpenAI API Key erfolgreich geladen.")
else:
logger.warning("Gemini API Key konnte nicht geladen werden. KI-Funktionen sind deaktiviert.")
logger.warning("Gemini/OpenAI API Key konnte nicht geladen werden. KI-Funktionen sind deaktiviert.")
if not cls.API_KEYS.get('serpapi'):
logger.warning("SerpAPI Key konnte nicht geladen werden. Suchfunktionen sind deaktiviert.")
@@ -521,24 +516,10 @@ class Config:
logger.warning("Genderize API Key konnte nicht geladen werden. Geschlechtserkennung ist eingeschraenkt.")
@staticmethod
def _load_key_from_file(filepath):
"""Hilfsfunktion zum Laden eines Schluessels aus einer Datei."""
def _load_key_from_file(filepath): # This method is now deprecated and should not be used
logger = logging.getLogger(__name__)
abs_path = os.path.abspath(filepath)
try:
with open(abs_path, "r", encoding="utf-8") as f:
key = f.read().strip()
if key:
return key
else:
logger.warning(f"API key file is empty: '{abs_path}'")
return None
except FileNotFoundError:
logger.warning(f"API key file not found at path: '{abs_path}'")
return None
except Exception as e:
logger.error(f"Error reading key file '{abs_path}': {e}")
return None
logger.warning(f"_load_key_from_file is deprecated and should not be used. Tried to load from {filepath}")
return None
# ==============================================================================
# 4. GLOBALE DATENSTRUKTUR-VARIABLEN