From 41ec8238ba7a1ebc2ede348f40667c84d5ebad77 Mon Sep 17 00:00:00 2001 From: hinotoi-agent Date: Mon, 29 Jun 2026 16:50:20 +0800 Subject: [PATCH] chore: log file manager profile denials --- api/models.py | 13 ++++++++++--- tests/test_file_manager_external_session.py | 12 +++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/api/models.py b/api/models.py index 0969958e..eb423121 100644 --- a/api/models.py +++ b/api/models.py @@ -3410,9 +3410,16 @@ def get_session_for_file_ops(sid: str): from api.profiles import _profiles_match, get_active_profile_name - if not _profiles_match( - getattr(session, 'profile', None), get_active_profile_name() - ): + session_profile = getattr(session, 'profile', None) + active_profile = get_active_profile_name() + if not _profiles_match(session_profile, active_profile): + logger.debug( + "Rejected file-manager session for foreign profile: " + "session_id=%s session_profile=%r active_profile=%r", + sid, + session_profile, + active_profile, + ) raise KeyError(sid) return session diff --git a/tests/test_file_manager_external_session.py b/tests/test_file_manager_external_session.py index 56df3b0c..fb5d26e9 100644 --- a/tests/test_file_manager_external_session.py +++ b/tests/test_file_manager_external_session.py @@ -12,6 +12,7 @@ Covers: from __future__ import annotations import io +import logging import re import sqlite3 from pathlib import Path @@ -138,7 +139,7 @@ def test_get_session_for_file_ops_webui_passthrough(models_module, monkeypatch): def test_get_session_for_file_ops_rejects_foreign_profile( - models_module, monkeypatch, tmp_path + models_module, monkeypatch, tmp_path, caplog ): """WebUI sessions must belong to the active profile before file access.""" profiles_module = pytest.importorskip("api.profiles") @@ -164,11 +165,16 @@ def test_get_session_for_file_ops_rejects_foreign_profile( monkeypatch.setattr(profiles_module, "_profiles_match", fake_profiles_match) monkeypatch.setattr(profiles_module, "get_active_profile_name", lambda: "default") - with pytest.raises(KeyError): - models_module.get_session_for_file_ops("foreign-webui-sid") + with caplog.at_level(logging.DEBUG, logger=models_module.logger.name): + with pytest.raises(KeyError): + models_module.get_session_for_file_ops("foreign-webui-sid") # A found-but-foreign WebUI sidecar is an authorization failure, not a # missing-session condition that can fall through to the state.db fallback. assert called == {"get_session": 1, "profile_match": 1, "state_db": 0} + assert "Rejected file-manager session for foreign profile" in caplog.text + assert "foreign-webui-sid" in caplog.text + assert "session_profile='research'" in caplog.text + assert "active_profile='default'" in caplog.text def test_file_read_rejects_foreign_profile_session(