pssecret-server/pssecret/main.py
2024-12-26 23:25:54 +01:00

49 lines
1.3 KiB
Python

from fastapi import FastAPI
from fastapi.exceptions import HTTPException
from pssecret.models import Secret, SecretSaveResult
from pssecret.redis_db import redis
from pssecret.utils import get_new_key
app = FastAPI()
@app.post(
"/secret",
summary="Store secret",
description=(
"Submit secret, it is saved on the server, get retrieval key in response. "
"Use that key to retrieve your data. Key could be used only once, "
"so use it wisely"
),
response_model=SecretSaveResult,
)
async def set_secret(data: Secret):
new_key = await get_new_key()
await redis.setex(new_key, 60 * 60 * 24, data.data)
return {
"key": new_key,
}
@app.get(
"/secret/{secret_key}",
summary="Retrieve secret",
description=(
"Returns previously saved data if it is still on the server. "
"Could be the other way around in two cases: "
"either it has already been retrieved, either storage timeout has expired"
),
response_model=Secret,
responses={404: {"description": "The item was not found"}},
)
async def get_secret(secret_key: str):
data: str | None = await redis.getdel(secret_key)
if data is None:
raise HTTPException(404)
return {
"data": data,
}