diff --git a/gso/api/v1/processes.py b/gso/api/v1/processes.py index 5edcbf69d483b44e331ceed72762e928abc3bc2c..6ad15e91519db09643359614a24ce61587a6739e 100644 --- a/gso/api/v1/processes.py +++ b/gso/api/v1/processes.py @@ -3,11 +3,13 @@ from typing import Any from uuid import UUID -from fastapi import APIRouter, HTTPException, status +from fastapi import APIRouter, HTTPException, status, Depends from orchestrator.db import ProcessStepTable from orchestrator.schemas.base import OrchestratorBaseModel -router = APIRouter(prefix="/processes", tags=["Processes"]) +from gso.auth.security import opa_security_default + +router = APIRouter(prefix="/processes", tags=["Processes"], dependencies=[Depends(opa_security_default)]) class CallBackResultsBaseModel(OrchestratorBaseModel): diff --git a/gso/middlewares.py b/gso/middlewares.py index 6005ee3874d5fd099dc7e04692478b87a0af36ac..222f50200ca55aab9d1e5d95fc97a7dd08241c2e 100644 --- a/gso/middlewares.py +++ b/gso/middlewares.py @@ -38,7 +38,7 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware): response_body += chunk try: json_content = json.loads(response_body) - self.modify_response_body(json_content, request) + await self.modify_response_body(json_content, request) modified_response_body = json.dumps(json_content).encode() headers = dict(response.headers) headers["content-length"] = str(len(modified_response_body)) @@ -55,7 +55,26 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware): return response @staticmethod - def modify_response_body(response_body: dict[str, Any], request: Request) -> None: + async def _get_token(request: Request) -> str: + """Get the token from the request headers. + + Args: + ---- + request (Request): The incoming HTTP request. + Returns: + ------- + str: The token from the request headers in specific format. + """ + bearer_prefix = "Bearer " + authorization_header = request.headers.get("Authorization") + if authorization_header: + # Remove the "Bearer " prefix from the token + token = authorization_header.replace(bearer_prefix, "") + return f"?token={token}" + else: + return "" + + async def modify_response_body(self, response_body: dict[str, Any], request: Request) -> None: """Modify the response body as needed. Args: @@ -63,7 +82,8 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware): response_body (Dict[str, Any]): The response body in dictionary format. request (Request): The incoming HTTP request. """ - max_output_length = 1000 + max_output_length = 500 + token = await self._get_token(request) try: for step in response_body["steps"]: if step["state"].get("callback_result", None): @@ -73,7 +93,7 @@ class ModifyProcessEndpointResponse(BaseHTTPMiddleware): if callback_result.get("output") and len(callback_result["output"]) > max_output_length: callback_result[ "output" - ] = f'{request.base_url}api/v1/processes/steps/{step["step_id"]}/callback-results/' + ] = f'{request.base_url}api/v1/processes/steps/{step["step_id"]}/callback-results{token}' step["state"]["callback_result"] = callback_result except (AttributeError, KeyError, TypeError): pass