26 lines
686 B
Python
26 lines
686 B
Python
import base64
|
|
import hashlib
|
|
|
|
from cryptography.fernet import Fernet, InvalidToken
|
|
from django.conf import settings
|
|
|
|
|
|
def _fernet():
|
|
key = hashlib.sha256(settings.SECRET_KEY.encode("utf-8")).digest()
|
|
return Fernet(base64.urlsafe_b64encode(key))
|
|
|
|
|
|
def encrypt_secret(value):
|
|
if value in (None, ""):
|
|
return ""
|
|
return _fernet().encrypt(value.encode("utf-8")).decode("ascii")
|
|
|
|
|
|
def decrypt_secret(value):
|
|
if not value:
|
|
return ""
|
|
try:
|
|
return _fernet().decrypt(value.encode("ascii")).decode("utf-8")
|
|
except InvalidToken as exc:
|
|
raise ValueError("Stored endpoint password cannot be decrypted. Re-enter it on the endpoint.") from exc
|