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, }