Skip to content

Commit 5d7d7ce

Browse files
authored
🐛 api-server: fixes product header contamination in webserver's client session (#7865)
1 parent 8d96382 commit 5d7d7ce

File tree

33 files changed

+254
-177
lines changed

33 files changed

+254
-177
lines changed

packages/service-library/src/servicelib/long_running_tasks/task.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from collections import deque
77
from contextlib import suppress
88
from datetime import datetime
9-
from typing import Any, Protocol
9+
from typing import Any, Protocol, TypeAlias
1010
from uuid import uuid4
1111

1212
from models_library.api_schemas_long_running_tasks.base import (
@@ -53,8 +53,8 @@ def _mark_task_to_remove_if_required(
5353
tasks_to_remove.append(task_id)
5454

5555

56-
TrackedTaskGroupDict = dict[TaskId, TrackedTask]
57-
TaskContext = dict[str, Any]
56+
TrackedTaskGroupDict: TypeAlias = dict[TaskId, TrackedTask]
57+
TaskContext: TypeAlias = dict[str, Any]
5858

5959

6060
class TasksManager:

services/api-server/src/simcore_service_api_server/api/dependencies/services.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from ..._service_programs import ProgramService
1313
from ..._service_solvers import SolverService
1414
from ..._service_studies import StudyService
15+
from ...services_http.webserver import AuthSession
1516
from ...services_rpc.catalog import CatalogService
1617
from ...services_rpc.wb_api_server import WbApiRpcClient
1718
from ...utils.client_base import BaseServiceClientApi

services/api-server/src/simcore_service_api_server/api/dependencies/webserver_http.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
from cryptography.fernet import Fernet
66
from fastapi import Depends, FastAPI, HTTPException, status
77
from fastapi.requests import Request
8-
from servicelib.rest_constants import X_PRODUCT_NAME_HEADER
98

109
from ..._constants import MSG_BACKEND_SERVICE_UNAVAILABLE
1110
from ...core.settings import ApplicationSettings, WebServerSettings
1211
from ...services_http.webserver import AuthSession
1312
from .application import get_app, get_settings
14-
from .authentication import Identity, get_active_user_email, get_current_identity
13+
from .authentication import (
14+
Identity,
15+
get_active_user_email,
16+
get_current_identity,
17+
)
1518

1619

1720
def _get_settings(
@@ -68,14 +71,14 @@ def get_webserver_session(
6871
Lifetime of AuthSession wrapper is one request because it needs different session cookies
6972
Lifetime of embedded client is attached to the app lifetime
7073
"""
71-
product_header: dict[str, str] = {X_PRODUCT_NAME_HEADER: f"{identity.product_name}"}
72-
session = AuthSession.create(app, session_cookies, product_header)
74+
session = AuthSession.create(
75+
app,
76+
session_cookies=session_cookies,
77+
product_name=identity.product_name,
78+
user_id=identity.user_id,
79+
)
7380
assert isinstance(session, AuthSession) # nosec
7481
return session
7582

7683

77-
__all__: tuple[str, ...] = (
78-
"AuthSession",
79-
"get_session_cookie",
80-
"get_webserver_session",
81-
)
84+
__all__: tuple[str, ...] = ("AuthSession",)

0 commit comments

Comments
 (0)