""" 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 _ENV_KEY = "FLARE_TOKEN_KEY" def _get_key() -> Fernet: # Direkt environment variable kullan, ConfigProvider'a bağımlılığı kaldır key = os.getenv(_ENV_KEY) # .env dosyasından yüklemeyi dene if not key: try: from dotenv import load_dotenv load_dotenv() key = os.getenv(_ENV_KEY) except ImportError: pass 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")