ciyidogan commited on
Commit
fc5668f
·
verified ·
1 Parent(s): 7567081

Update utils/encryption_utils.py

Browse files
Files changed (1) hide show
  1. utils/encryption_utils.py +87 -87
utils/encryption_utils.py CHANGED
@@ -1,88 +1,88 @@
1
- """
2
- Flare – Fernet şifreleme yardımcıları
3
- - encrypt(): düz string → "enc:<blob>"
4
- - decrypt(): enc:<blob> → düz string (veya enc: yoksa aynen döner)
5
- Anahtar: FLARE_TOKEN_KEY (32-bayt, base64, URL-safe)
6
- """
7
-
8
- import os
9
- from typing import Optional
10
- from cryptography.fernet import Fernet, InvalidToken
11
- from utils.logger import log_error, log_warning
12
-
13
- _ENV_KEY = "FLARE_TOKEN_KEY"
14
-
15
- def _get_key() -> Fernet:
16
- """Get encryption key with better error messages"""
17
- # Direkt environment variable kullan
18
- key = os.getenv(_ENV_KEY)
19
-
20
- # .env dosyasından yüklemeyi dene
21
- if not key:
22
- try:
23
- from dotenv import load_dotenv
24
- load_dotenv()
25
- key = os.getenv(_ENV_KEY)
26
- except ImportError:
27
- pass
28
-
29
- if not key:
30
- error_msg = (
31
- f"{_ENV_KEY} ortam değişkeni tanımlanmadı. "
32
- f"Lütfen 32-byte base64 key oluşturun: python generate_key.py"
33
- )
34
- log_error(error_msg)
35
- raise RuntimeError(error_msg)
36
-
37
- # Key formatını kontrol et
38
- try:
39
- return Fernet(key.encode())
40
- except Exception as e:
41
- error_msg = (
42
- f"{_ENV_KEY} geçersiz format. "
43
- f"32-byte base64 URL-safe key olmalı. "
44
- f"Yeni key için: python generate_key.py"
45
- )
46
- log_error(error_msg, error=str(e))
47
- raise RuntimeError(error_msg)
48
-
49
- def encrypt(plain: str) -> str:
50
- """düz string → enc:..."""
51
- if not plain:
52
- log_warning("Empty string passed to encrypt")
53
- return ""
54
-
55
- try:
56
- f = _get_key()
57
- encrypted = f.encrypt(plain.encode()).decode()
58
- return "enc:" + encrypted
59
- except Exception as e:
60
- log_error("Encryption failed", error=str(e))
61
- raise
62
-
63
- def decrypt(value: Optional[str]) -> Optional[str]:
64
- """enc:... ise çözer, değilse aynen döndürür"""
65
- if value is None or not isinstance(value, str):
66
- return value
67
-
68
- if not value.startswith("enc:"):
69
- return value
70
-
71
- token = value.split("enc:", 1)[1]
72
-
73
- try:
74
- f = _get_key()
75
- decrypted = f.decrypt(token.encode()).decode()
76
- return decrypted
77
- except InvalidToken:
78
- error_msg = (
79
- "Şifre çözme başarısız. Muhtemel sebepler:\n"
80
- "1. FLARE_TOKEN_KEY değişti\n"
81
- "2. Şifreli veri bozuldu\n"
82
- "3. Farklı bir key ile şifrelendi"
83
- )
84
- log_error(error_msg)
85
- raise RuntimeError(error_msg)
86
- except Exception as e:
87
- log_error("Decryption error", error=str(e))
88
  raise
 
1
+ """
2
+ Flare – Fernet şifreleme yardımcıları
3
+ - encrypt(): düz string → "enc:<blob>"
4
+ - decrypt(): enc:<blob> → düz string (veya enc: yoksa aynen döner)
5
+ Anahtar: FLARE_TOKEN_KEY (32-bayt, base64, URL-safe)
6
+ """
7
+
8
+ import os
9
+ from typing import Optional
10
+ from cryptography.fernet import Fernet, InvalidToken
11
+ from .logger import log_error, log_warning
12
+
13
+ _ENV_KEY = "FLARE_TOKEN_KEY"
14
+
15
+ def _get_key() -> Fernet:
16
+ """Get encryption key with better error messages"""
17
+ # Direkt environment variable kullan
18
+ key = os.getenv(_ENV_KEY)
19
+
20
+ # .env dosyasından yüklemeyi dene
21
+ if not key:
22
+ try:
23
+ from dotenv import load_dotenv
24
+ load_dotenv()
25
+ key = os.getenv(_ENV_KEY)
26
+ except ImportError:
27
+ pass
28
+
29
+ if not key:
30
+ error_msg = (
31
+ f"{_ENV_KEY} ortam değişkeni tanımlanmadı. "
32
+ f"Lütfen 32-byte base64 key oluşturun: python generate_key.py"
33
+ )
34
+ log_error(error_msg)
35
+ raise RuntimeError(error_msg)
36
+
37
+ # Key formatını kontrol et
38
+ try:
39
+ return Fernet(key.encode())
40
+ except Exception as e:
41
+ error_msg = (
42
+ f"{_ENV_KEY} geçersiz format. "
43
+ f"32-byte base64 URL-safe key olmalı. "
44
+ f"Yeni key için: python generate_key.py"
45
+ )
46
+ log_error(error_msg, error=str(e))
47
+ raise RuntimeError(error_msg)
48
+
49
+ def encrypt(plain: str) -> str:
50
+ """düz string → enc:..."""
51
+ if not plain:
52
+ log_warning("Empty string passed to encrypt")
53
+ return ""
54
+
55
+ try:
56
+ f = _get_key()
57
+ encrypted = f.encrypt(plain.encode()).decode()
58
+ return "enc:" + encrypted
59
+ except Exception as e:
60
+ log_error("Encryption failed", error=str(e))
61
+ raise
62
+
63
+ def decrypt(value: Optional[str]) -> Optional[str]:
64
+ """enc:... ise çözer, değilse aynen döndürür"""
65
+ if value is None or not isinstance(value, str):
66
+ return value
67
+
68
+ if not value.startswith("enc:"):
69
+ return value
70
+
71
+ token = value.split("enc:", 1)[1]
72
+
73
+ try:
74
+ f = _get_key()
75
+ decrypted = f.decrypt(token.encode()).decode()
76
+ return decrypted
77
+ except InvalidToken:
78
+ error_msg = (
79
+ "Şifre çözme başarısız. Muhtemel sebepler:\n"
80
+ "1. FLARE_TOKEN_KEY değişti\n"
81
+ "2. Şifreli veri bozuldu\n"
82
+ "3. Farklı bir key ile şifrelendi"
83
+ )
84
+ log_error(error_msg)
85
+ raise RuntimeError(error_msg)
86
+ except Exception as e:
87
+ log_error("Decryption error", error=str(e))
88
  raise