Spaces:
Building
Building
File size: 2,604 Bytes
41622e0 41d5a82 97ae05d 41622e0 97ae05d 41622e0 82d3f6f 41622e0 82d3f6f d1248bd 41d5a82 d1248bd 41d5a82 41622e0 82d3f6f d1248bd 82d3f6f 41622e0 97ae05d 82d3f6f 41622e0 97ae05d 82d3f6f 97ae05d 82d3f6f 97ae05d 82d3f6f 41622e0 82d3f6f 41622e0 82d3f6f |
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 |