Skip to content

Commit c12bc16

Browse files
fix: handle invalid session auth tokens (#13863)
* fix: handle invalid session auth tokens (#13823) * fix: handle invalid session auth tokens * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> (cherry picked from commit cf5c37f) * test: cover telemetry writer session warning (#13821) Adapt the warning regression from #13821 for release-1.11.0, which already uses SQLAlchemy AsyncSession via #13845. (cherry picked from commit f5dd643) --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent b217730 commit c12bc16

3 files changed

Lines changed: 35 additions & 2 deletions

File tree

.secrets.baseline

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4882,15 +4882,15 @@
48824882
"filename": "src/backend/tests/unit/test_login.py",
48834883
"hashed_secret": "8bb6118f8fd6935ad0876a3be34a717d32708ffd",
48844884
"is_verified": false,
4885-
"line_number": 97,
4885+
"line_number": 99,
48864886
"is_secret": false
48874887
},
48884888
{
48894889
"type": "Secret Keyword",
48904890
"filename": "src/backend/tests/unit/test_login.py",
48914891
"hashed_secret": "d8ecf7db8fc9ec9c31bc5c9ae2929cc599c75f8d",
48924892
"is_verified": false,
4893-
"line_number": 113,
4893+
"line_number": 115,
48944894
"is_secret": false
48954895
}
48964896
],

src/backend/tests/unit/services/telemetry_writer/test_service.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import asyncio
1313
import shutil
1414
import tempfile
15+
import warnings
1516
from pathlib import Path
1617
from uuid import uuid4
1718

@@ -342,6 +343,21 @@ async def test_flush_inserts_transactions_and_vertex_builds(writer_with_engine)
342343
assert str(flow_id) in writer._dirty_vb_flows
343344

344345

346+
async def test_flush_and_retention_do_not_emit_deprecated_session_execute_warning(writer_with_engine) -> None:
347+
writer, _ = writer_with_engine
348+
writer.settings_service.settings.max_transactions_to_keep = 1
349+
writer.settings_service.settings.max_vertex_builds_to_keep = 1
350+
flow_id = uuid4()
351+
352+
tx_batch = [_make_transaction_row(flow_id) for _ in range(3)]
353+
vb_batch = [_make_vertex_build_row(flow_id, vertex_id="v1") for _ in range(3)]
354+
355+
with warnings.catch_warnings():
356+
warnings.filterwarnings("error", message="(?s).*session\\.exec\\(\\).*", category=DeprecationWarning)
357+
await writer._flush(tx_batch, vb_batch)
358+
await writer._run_retention_pass()
359+
360+
345361
async def test_retention_sweep_caps_transactions_per_flow(writer_with_engine) -> None:
346362
writer, engine = writer_with_engine
347363
writer.settings_service.settings.max_transactions_to_keep = 3

src/backend/tests/unit/test_login.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from datetime import datetime, timedelta, timezone
2+
from unittest.mock import AsyncMock, patch
23

34
import jwt
45
import pytest
6+
from langflow.services.auth.exceptions import InvalidTokenError
57
from langflow.services.database.models.auth import SSOUserProfile
68
from langflow.services.database.models.user import User
79
from langflow.services.deps import get_auth_service, get_settings_service, session_scope
@@ -125,6 +127,21 @@ async def test_session_endpoint_unauthenticated(client):
125127
assert data["store_api_key"] is None
126128

127129

130+
async def test_session_endpoint_invalid_token_returns_unauthenticated(client):
131+
"""Test /session endpoint handles invalid tokens as unauthenticated sessions."""
132+
auth_service = AsyncMock()
133+
auth_service.get_current_user_from_access_token.side_effect = InvalidTokenError("Invalid token")
134+
135+
with patch("langflow.api.v1.login.get_auth_service", return_value=auth_service):
136+
response = await client.get("api/v1/session", headers={"Authorization": "Bearer invalid-token"})
137+
138+
assert response.status_code == 200
139+
data = response.json()
140+
assert data["authenticated"] is False
141+
assert data["user"] is None
142+
assert data["store_api_key"] is None
143+
144+
128145
async def test_session_endpoint_authenticated(client, logged_in_headers):
129146
"""Test /session endpoint returns user info for authenticated requests."""
130147
response = await client.get("api/v1/session", headers=logged_in_headers)

0 commit comments

Comments
 (0)