Skip to content

Commit 9d42936

Browse files
committed
FIX: Do not allow new session if one exists
1 parent 9d1bcc7 commit 9d42936

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

src/fmu_settings_api/deps.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ async def ensure_user_fmu_directory() -> UserFMUDirectory:
6767
UserFMUDirDep = Annotated[UserFMUDirectory, Depends(ensure_user_fmu_directory)]
6868

6969

70-
async def get_session(fmu_settings_session: str | None = Cookie(None)) -> Session:
70+
async def get_session(
71+
fmu_settings_session: Annotated[str | None, Cookie()] = None,
72+
) -> Session:
7173
"""Gets a session from the session manager."""
7274
if not fmu_settings_session:
7375
raise HTTPException(

src/fmu_settings_api/v1/main.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
import contextlib
44
from pathlib import Path
5+
from typing import Annotated
56

6-
from fastapi import APIRouter, Depends, HTTPException, Response
7+
from fastapi import APIRouter, Cookie, Depends, HTTPException, Response
78
from fmu.settings import find_nearest_fmu_directory
89
from fmu.settings.models.user_config import UserConfig
910

@@ -40,16 +41,22 @@ async def v1_health_check() -> dict[str, str]:
4041
dependencies=[Depends(verify_auth_token)],
4142
)
4243
async def create_session(
43-
response: Response, auth_token: AuthTokenDep, user_fmu_dir: UserFMUDirDep
44+
response: Response,
45+
auth_token: AuthTokenDep,
46+
user_fmu_dir: UserFMUDirDep,
47+
fmu_settings_session: Annotated[str | None, Cookie()] = None,
4448
) -> SessionResponse:
4549
"""Establishes a user session."""
50+
if fmu_settings_session:
51+
raise HTTPException(status_code=409, detail="A session already exists")
52+
4653
try:
4754
session_id = await create_fmu_session(user_fmu_dir)
4855
response.set_cookie(
4956
key=settings.SESSION_COOKIE_KEY,
5057
value=session_id,
5158
httponly=True,
52-
secure=True,
59+
secure=False,
5360
samesite="lax",
5461
)
5562
config_dict = user_fmu_dir.config.load().model_dump()

tests/test_v1/test_create_session.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,28 @@ async def test_get_session_from_project_path_returns_fmu_project(
204204

205205
assert session.project_fmu_directory.path == project_fmu_dir.path
206206
assert session.project_fmu_directory.config.load() == project_fmu_dir.config.load()
207+
208+
209+
async def test_getting_two_sessions_returns_error(
210+
tmp_path_mocked_home: Path,
211+
mock_token: str,
212+
session_manager: SessionManager,
213+
) -> None:
214+
"""Tests that user .fmu is created when a session is created."""
215+
user_home = tmp_path_mocked_home / "home"
216+
response = client.post(ROUTE, headers={settings.TOKEN_HEADER_NAME: mock_token})
217+
assert response.status_code == status.HTTP_200_OK, response.json()
218+
219+
user_fmu_dir = UserFMUDirectory()
220+
assert user_fmu_dir.path == user_home / ".fmu"
221+
222+
session_id = response.cookies.get(settings.SESSION_COOKIE_KEY)
223+
assert session_id is not None
224+
session = await session_manager.get_session(session_id)
225+
assert session is not None
226+
assert isinstance(session, Session)
227+
assert session.user_fmu_directory.path == user_fmu_dir.path
228+
229+
response = client.post(ROUTE, headers={settings.TOKEN_HEADER_NAME: mock_token})
230+
assert response.status_code == status.HTTP_409_CONFLICT, response.json()
231+
assert response.json()["detail"] == "A session already exists"

0 commit comments

Comments
 (0)