""" Flare – Fernet şifreleme yardımcıları - encrypt(): düz string → "enc:" - decrypt(): enc: → düz string (veya enc: yoksa aynen döner) Anahtar: FLARE_TOKEN_KEY (32-bayt, base64, URL-safe) """ import os from typing import Optional from cryptography.fernet import Fernet, InvalidToken from config_provider import ConfigProvider _ENV_KEY = "FLARE_TOKEN_KEY" def _get_key() -> Fernet: # Check work_mode to determine where to get the key try: cfg = ConfigProvider.get() if cfg.global_config.is_cloud_mode(): # Cloud mode - use environment variable directly key = os.getenv(_ENV_KEY) else: # On-premise mode - load from .env file from dotenv import load_dotenv load_dotenv() key = os.getenv(_ENV_KEY) except: # Fallback if ConfigProvider not available yet key = os.getenv(_ENV_KEY) if not key: raise RuntimeError(f"{_ENV_KEY} ortam değişkeni tanımlanmadı") return Fernet(key.encode()) def encrypt(plain: str) -> str: """düz string → enc:...""" f = _get_key() return "enc:" + f.encrypt(plain.encode()).decode() def decrypt(value: Optional[str]) -> Optional[str]: """enc:... ise çözer, değilse aynen döndürür""" if value is None or not isinstance(value, str): return value if not value.startswith("enc:"): return value token = value.split("enc:", 1)[1] f = _get_key() try: return f.decrypt(token.encode()).decode() except InvalidToken: raise RuntimeError("FLARE_TOKEN_KEY hatalı veya token bozuk")