Skip to content

Commit 7db01f3

Browse files
committed
[DOP-26758] Allow disabling SessionMiddleware
1 parent 5334985 commit 7db01f3

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

data_rentgen/server/middlewares/session.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88

99
def apply_session_middleware(app: FastAPI, settings: SessionSettings) -> FastAPI:
1010
"""Add SessionMiddleware middleware to the application."""
11+
if not settings.enabled:
12+
return app
1113

12-
settings_dict = settings.model_dump(exclude={"secret_key"})
13-
settings_dict["secret_key"] = settings.secret_key.get_secret_value()
14+
settings_dict = settings.model_dump(exclude={"secret_key", "enabled"})
15+
settings_dict["secret_key"] = settings.secret_key.get_secret_value() # type: ignore[union-attr]
1416

1517
app.add_middleware(SessionMiddleware, **settings_dict)
1618
return app

data_rentgen/server/settings/session.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44

55
import textwrap
66

7-
from pydantic import BaseModel, ConfigDict, Field, SecretStr
7+
from pydantic import BaseModel, ConfigDict, Field, SecretStr, ValidationInfo, field_validator
88

99
DEFAULT_MAX_AGE = 1_209_600
1010

1111

1212
class SessionSettings(BaseModel):
1313
"""Session Middleware Settings.
1414
15+
Required for :ref:`keycloak-auth-provider`.
16+
1517
See `SessionMiddleware <https://www.starlette.io/middleware/#sessionmiddleware>`_ documentation.
1618
1719
.. note::
@@ -24,6 +26,7 @@ class SessionSettings(BaseModel):
2426
2527
.. code-block:: bash
2628
29+
DATA_RENTGEN__SERVER__SESSION__ENABLED=True
2730
DATA_RENTGEN__SERVER__SESSION__SECRET_KEY=secret
2831
DATA_RENTGEN__SERVER__SESSION__SESSION_COOKIE=custom_cookie_name
2932
DATA_RENTGEN__SERVER__SESSION__MAX_AGE=None # cookie will last as long as the browser session
@@ -33,7 +36,12 @@ class SessionSettings(BaseModel):
3336
3437
"""
3538

36-
secret_key: SecretStr = Field(
39+
enabled: bool = Field(
40+
default=False,
41+
description="Set to ``True`` to enable SessionMiddleware",
42+
)
43+
secret_key: SecretStr | None = Field(
44+
default=None,
3745
description=textwrap.dedent(
3846
"""
3947
Secret key for encrypting cookies.
@@ -66,3 +74,11 @@ class SessionSettings(BaseModel):
6674
)
6775

6876
model_config = ConfigDict(extra="allow")
77+
78+
@field_validator("secret_key")
79+
@classmethod
80+
def _validate_secret_key(cls, value: SecretStr | None, info: ValidationInfo) -> SecretStr | None:
81+
if not value and info.data.get("enabled"):
82+
msg = "secret_key is required"
83+
raise ValueError(msg)
84+
return value
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Allow disabling ``SessionMiddleware``, as it only required by ``KeycloakAuthProvider``.

0 commit comments

Comments
 (0)