pssecret-server/pssecret_server/utils.py

33 lines
813 B
Python
Raw Normal View History

from uuid import uuid4
2025-01-03 11:04:51 +00:00
from cryptography.fernet import Fernet
2025-01-03 14:32:01 +00:00
from redis.asyncio import Redis
2025-01-01 19:01:10 +00:00
from pssecret_server.models import Secret
2025-01-03 11:04:51 +00:00
def encrypt_secret(data: Secret, fernet: Fernet) -> Secret:
encrypted = fernet.encrypt(data.data.encode()).decode()
return Secret(data=encrypted)
2025-01-03 11:04:51 +00:00
def decrypt_secret(secret: bytes, fernet: Fernet) -> bytes:
return fernet.decrypt(secret)
async def get_new_key(redis: Redis) -> str:
"""Returns free Redis key"""
while True:
new_key = str(uuid4())
if not await redis.exists(new_key):
return new_key
async def save_secret(data: Secret, redis: Redis) -> str:
"""Save passed data, returns retrieval key"""
new_key = await get_new_key(redis)
await redis.setex(new_key, 60 * 60 * 24, data.data)
return new_key