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