Commit e03ed1a5 authored by Dimitrios Gogos's avatar Dimitrios Gogos
Browse files

feat: utilize run_in_threadpool for asynchronous token decoding in callback and me routes

parent 399aded6
Loading
Loading
Loading
Loading
+5 −2
Changes for src/portal_service/api/auth/routes.py: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ from typing import Annotated
import structlog
from fastapi import APIRouter, Depends, HTTPException, Request, Response, status
from fastapi.responses import RedirectResponse
from starlette.concurrency import run_in_threadpool

from portal_service.api.auth.schemas import CurrentUser, LogoutResponse
from portal_service.api.auth.verification import _decode_id_token, _decode_token
@@ -123,7 +124,9 @@ async def callback(
        )
        if issued.tokens.id_token is None:
            raise InvalidTokenError("Keycloak returned no ID token")
        claims = _decode_id_token(issued.tokens.id_token, expected_nonce=attempt.nonce)
        claims = await run_in_threadpool(
            _decode_id_token, issued.tokens.id_token, expected_nonce=attempt.nonce
        )

        created = await session_service.create(subject=claims.sub, issued=issued)
    except AuthenticationError as exc:
@@ -167,7 +170,7 @@ async def me(session: CurrentSessionDep) -> CurrentUser:
    is verified again here, including its expiry.
    """
    try:
        claims = _decode_token(session.tokens.access_token)
        claims = await run_in_threadpool(_decode_token, session.tokens.access_token)
    except AuthenticationError as exc:
        # Includes an expired access token; refreshing it comes next.
        logger.info("session token no longer usable", error=str(exc))