Spaces:
Paused
Paused
| """ | |
| Flare – Fernet şifreleme yardımcıları | |
| - encrypt(): düz string → "enc:<blob>" | |
| - decrypt(): enc:<blob> → 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 utils import log | |
| _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") |