25 lines
609 B
Python
25 lines
609 B
Python
|
|
import base64
|
||
|
|
import hashlib
|
||
|
|
|
||
|
|
from cryptography.fernet import Fernet
|
||
|
|
|
||
|
|
from app.config import settings
|
||
|
|
|
||
|
|
|
||
|
|
def _build_fernet() -> Fernet:
|
||
|
|
digest = hashlib.sha256(settings.SECRET_KEY.encode("utf-8")).digest()
|
||
|
|
key = base64.urlsafe_b64encode(digest)
|
||
|
|
return Fernet(key)
|
||
|
|
|
||
|
|
|
||
|
|
def encrypt_secret(value: str | None) -> str | None:
|
||
|
|
if not value:
|
||
|
|
return None
|
||
|
|
return _build_fernet().encrypt(value.encode("utf-8")).decode("utf-8")
|
||
|
|
|
||
|
|
|
||
|
|
def decrypt_secret(value: str | None) -> str | None:
|
||
|
|
if not value:
|
||
|
|
return None
|
||
|
|
return _build_fernet().decrypt(value.encode("utf-8")).decode("utf-8")
|