第一次提交

This commit is contained in:
2026-08-01 16:50:55 +08:00
commit c8f9e39039
68 changed files with 6016 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
"""用户 AI api_key 的对称加密(Fernet)。密钥来自 settings.fernet_key。"""
from cryptography.fernet import Fernet, InvalidToken
from app.config import settings
def _fernet() -> Fernet:
if not settings.fernet_key:
raise RuntimeError(
"FERNET_KEY 未配置,无法加解密用户 api_key。"
"生成:python -c \"from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())\""
)
return Fernet(settings.fernet_key.encode("utf-8"))
def encrypt(plaintext: str) -> str:
return _fernet().encrypt(plaintext.encode("utf-8")).decode("utf-8")
def decrypt(token: str) -> str | None:
try:
return _fernet().decrypt(token.encode("utf-8")).decode("utf-8")
except (InvalidToken, ValueError):
return None