File size: 1,661 Bytes
41622e0
 
41d5a82
 
97ae05d
41622e0
 
97ae05d
 
41622e0
41d5a82
41622e0
 
 
 
41d5a82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41622e0
97ae05d
41622e0
 
 
97ae05d
41622e0
97ae05d
41622e0
97ae05d
 
 
 
 
 
 
41622e0
 
 
 
41d5a82
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
"""
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 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")