Spaces:
Building
Building
File size: 2,691 Bytes
1e4a027 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
"""
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 logger import log_error, log_warning
_ENV_KEY = "FLARE_TOKEN_KEY"
def _get_key() -> Fernet:
"""Get encryption key with better error messages"""
# Direkt environment variable kullan
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:
error_msg = (
f"{_ENV_KEY} ortam değişkeni tanımlanmadı. "
f"Lütfen 32-byte base64 key oluşturun: python generate_key.py"
)
log_error(error_msg)
raise RuntimeError(error_msg)
# Key formatını kontrol et
try:
return Fernet(key.encode())
except Exception as e:
error_msg = (
f"{_ENV_KEY} geçersiz format. "
f"32-byte base64 URL-safe key olmalı. "
f"Yeni key için: python generate_key.py"
)
log_error(error_msg, error=str(e))
raise RuntimeError(error_msg)
def encrypt(plain: str) -> str:
"""düz string → enc:..."""
if not plain:
log_warning("Empty string passed to encrypt")
return ""
try:
f = _get_key()
encrypted = f.encrypt(plain.encode()).decode()
return "enc:" + encrypted
except Exception as e:
log_error("Encryption failed", error=str(e))
raise
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]
try:
f = _get_key()
decrypted = f.decrypt(token.encode()).decode()
return decrypted
except InvalidToken:
error_msg = (
"Şifre çözme başarısız. Muhtemel sebepler:\n"
"1. FLARE_TOKEN_KEY değişti\n"
"2. Şifreli veri bozuldu\n"
"3. Farklı bir key ile şifrelendi"
)
log_error(error_msg)
raise RuntimeError(error_msg)
except Exception as e:
log_error("Decryption error", error=str(e))
raise |