diff --git a/packages/v1/administrativo/endpoints/atos_view_document_endpoint.py b/packages/v1/administrativo/endpoints/atos_view_document_endpoint.py new file mode 100644 index 0000000..7e348f4 --- /dev/null +++ b/packages/v1/administrativo/endpoints/atos_view_document_endpoint.py @@ -0,0 +1,22 @@ +from fastapi import APIRouter, Query, HTTPException +from fastapi.responses import FileResponse +from jose import jwt, JWTError + +router = APIRouter(prefix="/view") + + +@router.get("/{file_id}/{filename}") +def visualizar_arquivo(file_id: str, filename: str, token: str = Query(...)): + """Valida o token e retorna o arquivo se autorizado.""" + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + if payload["sub"] != file_id or payload["filename"] != filename: + raise HTTPException(status_code=403, detail="Token inválido.") + except JWTError: + raise HTTPException(status_code=401, detail="Token expirado ou inválido.") + + file_path = f"files/{filename}" + try: + return FileResponse(file_path, media_type="application/pdf") + except FileNotFoundError: + raise HTTPException(status_code=404, detail="Arquivo não encontrado.") diff --git a/packages/v1/api.py b/packages/v1/api.py index ff339d0..ae68d96 100644 --- a/packages/v1/api.py +++ b/packages/v1/api.py @@ -8,6 +8,7 @@ from packages.v1.administrativo.endpoints import ato_documento_endpoint from packages.v1.administrativo.endpoints import ato_parte_endpoint from packages.v1.administrativo.endpoints import auth_endpoint from packages.v1.administrativo.endpoints import atos_endpoint +from packages.v1.administrativo.endpoints import atos_view_document_endpoint # Cria uma instância do APIRouter que vai agregar todas as rotas da API api_router = APIRouter() @@ -45,8 +46,14 @@ api_router.include_router( tags=["Autentica o usuário e retorna o token de acesso"], ) - # Inclui as rotas de ato_principal api_router.include_router( atos_endpoint.router, prefix="/atos", tags=["Retorna o ato e suas dependências"] ) + +# Inclui as rotas de visualização de documentos de atos +api_router.include_router( + atos_view_document_endpoint.router, + prefix="/view", + tags=["Retorna o ato e suas dependências"], +)