Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions src/blueapi/service/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
)
from fastapi.datastructures import Address
from fastapi.middleware.cors import CORSMiddleware
from fastapi.requests import HTTPConnection
from fastapi.responses import RedirectResponse, StreamingResponse
from fastapi.security import OAuth2AuthorizationCodeBearer
from observability_utils.tracing import (
Expand Down Expand Up @@ -161,6 +162,11 @@ def inner(request: Request, access_token: str = Depends(oauth_scheme)):
return inner


def _user(request: HTTPConnection) -> str | None:
user = getattr(request.state, "decoded_access_token", {})
return user.get("fedid", None)


TRACER = get_tracer("interface")


Expand Down Expand Up @@ -283,18 +289,11 @@ def submit_task(
response: Response,
task_request: Annotated[TaskRequest, Body(..., examples=[example_task_request])],
runner: Annotated[WorkerDispatcher, Depends(_runner)],
user: Annotated[str, Depends(_user)],
) -> TaskResponse:
"""Submit a task to the worker."""
try:
# Extract user from jwt if using OIDC (if jwt exists)
access_token: dict[str, Any] | None = getattr(
request.state, "decoded_access_token", None
)
if access_token:
user: str = access_token.get("fedid", "Unknown")
else:
user = "Unknown"

user = user or "UNKNOWN"
task_id: str = runner.run(interface.submit_task, task_request, {"user": user})
response.headers["Location"] = f"{request.url}/{task_id}"
return TaskResponse(task_id=task_id)
Expand Down
Loading