Skip to content

Commit 8be5c43

Browse files
committed
@GitHK review: session
1 parent 74088cb commit 8be5c43

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

services/web/server/src/simcore_service_webserver/session/_cookie_storage.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from aiohttp import web
1111
from aiohttp_session.cookie_storage import EncryptedCookieStorage
1212

13+
from .errors import SessionValueError
14+
1315
_logger = logging.getLogger(__name__)
1416

1517

@@ -20,8 +22,13 @@ def _share_cookie_across_all_subdomains(
2022
Shares cookie across all subdomains, by appending a dot (`.`) in front of the domain name
2123
overwrite domain from `None` (browser sets `example.com`) to `.example.com`
2224
"""
23-
if (host := request.url.host) and host is not None:
24-
params["domain"] = f".{host.lstrip('.')}"
25+
host = request.url.host
26+
if host is None:
27+
raise SessionValueError(
28+
invalid="host", host=host, request_url=request.url, params=params
29+
)
30+
31+
params["domain"] = f".{host.lstrip('.')}"
2532

2633
return params
2734

@@ -47,8 +54,16 @@ def save_cookie(
4754
) -> None:
4855

4956
params = self._cookie_params.copy()
50-
if request := response._req: # pylint:disable=protected-access # noqa: SLF001
51-
params = _share_cookie_across_all_subdomains(request, params)
57+
request = response._req # pylint:disable=protected-access # noqa: SLF001
58+
if not request:
59+
raise SessionValueError(
60+
invalid="request",
61+
invalid_request=request,
62+
response=response,
63+
params=params,
64+
)
65+
66+
params = _share_cookie_across_all_subdomains(request, params)
5267

5368
# --------------------------------------------------------
5469
# WARNING: the code below is taken and adapted from the superclass
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from ..errors import WebServerBaseError
2+
3+
4+
class SessionValueError(WebServerBaseError, ValueError):
5+
msg_template = "Invalid {invalid} in session"

services/web/server/tests/unit/with_dbs/03/test_session.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
import pytest
1212
from aiohttp import web
1313
from aiohttp.test_utils import TestClient
14-
from aiohttp_session.cookie_storage import EncryptedCookieStorage
1514
from cryptography.fernet import Fernet
1615
from pytest_simcore.helpers.dict_tools import ConfigDict
1716
from pytest_simcore.helpers.typing_env import EnvVarsDict
1817
from pytest_simcore.helpers.webserver_login import NewUser
1918
from simcore_service_webserver.application import create_application
19+
from simcore_service_webserver.session._cookie_storage import (
20+
SharedCookieEncryptedCookieStorage,
21+
)
2022
from simcore_service_webserver.session.api import get_session
2123
from simcore_service_webserver.session.settings import SessionSettings
2224

@@ -128,7 +130,7 @@ def test_session_settings(
128130
== WEBSERVER_SESSION_SECRET_KEY
129131
)
130132

131-
_should_not_raise = EncryptedCookieStorage(
133+
_should_not_raise = SharedCookieEncryptedCookieStorage(
132134
# NOTE: we pass here a string!
133135
secret_key=settings.SESSION_SECRET_KEY.get_secret_value()
134136
)

0 commit comments

Comments
 (0)