fix(dashboard): keep local file browser on home
This commit is contained in:
@@ -1230,7 +1230,12 @@ def _managed_files_policy(request: Request, *, create_root: bool = True) -> Mana
|
|||||||
root = _ensure_managed_root(raw_forced_root) if create_root else _canonical_path(Path(raw_forced_root))
|
root = _ensure_managed_root(raw_forced_root) if create_root else _canonical_path(Path(raw_forced_root))
|
||||||
return ManagedFilesPolicy(default_path=root, locked_root=root, can_change_path=False)
|
return ManagedFilesPolicy(default_path=root, locked_root=root, can_change_path=False)
|
||||||
|
|
||||||
if not _local_dashboard_request(request) or _default_hermes_root_is_opt_data():
|
# Remote/OAuth access does not imply a hosted container. Users can expose a
|
||||||
|
# local dashboard through the auth gate (for example a macOS launchd install)
|
||||||
|
# and still expect the Files page to browse their local home directory. Lock
|
||||||
|
# to /opt/data only when the installation's Hermes root is actually /opt/data
|
||||||
|
# (the container/hosted layout) or when HERMES_DASHBOARD_FILES_ROOT is set.
|
||||||
|
if _default_hermes_root_is_opt_data():
|
||||||
root = _ensure_managed_root(_HOSTED_MANAGED_FILES_ROOT) if create_root else _HOSTED_MANAGED_FILES_ROOT
|
root = _ensure_managed_root(_HOSTED_MANAGED_FILES_ROOT) if create_root else _HOSTED_MANAGED_FILES_ROOT
|
||||||
return ManagedFilesPolicy(default_path=root, locked_root=root, can_change_path=False)
|
return ManagedFilesPolicy(default_path=root, locked_root=root, can_change_path=False)
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,33 @@ def test_local_mode_defaults_to_home_and_can_jump_to_absolute_path(local_files_c
|
|||||||
assert other_listing.json()["entries"][0]["path"] == str(other / "other.txt")
|
assert other_listing.json()["entries"][0]["path"] == str(other / "other.txt")
|
||||||
|
|
||||||
|
|
||||||
|
def test_gated_local_mode_still_defaults_to_home(monkeypatch, tmp_path):
|
||||||
|
home = tmp_path / "home"
|
||||||
|
home.mkdir()
|
||||||
|
monkeypatch.delenv("HERMES_DASHBOARD_FILES_ROOT", raising=False)
|
||||||
|
monkeypatch.delenv("HERMES_MANAGED", raising=False)
|
||||||
|
monkeypatch.setenv("HOME", str(home))
|
||||||
|
monkeypatch.setenv("HERMES_HOME", str(home / ".hermes"))
|
||||||
|
|
||||||
|
prev_auth_required = getattr(web_server.app.state, "auth_required", None)
|
||||||
|
prev_bound_host = getattr(web_server.app.state, "bound_host", None)
|
||||||
|
web_server.app.state.auth_required = True
|
||||||
|
web_server.app.state.bound_host = "0.0.0.0"
|
||||||
|
try:
|
||||||
|
request = SimpleNamespace(
|
||||||
|
app=web_server.app,
|
||||||
|
client=SimpleNamespace(host="10.0.0.2"),
|
||||||
|
url=SimpleNamespace(hostname="example.com"),
|
||||||
|
)
|
||||||
|
policy = web_server._managed_files_policy(request, create_root=False)
|
||||||
|
finally:
|
||||||
|
_restore_app_state(prev_auth_required, prev_bound_host)
|
||||||
|
|
||||||
|
assert policy.default_path == home.resolve()
|
||||||
|
assert policy.locked_root is None
|
||||||
|
assert policy.can_change_path is True
|
||||||
|
|
||||||
|
|
||||||
def test_local_mode_upload_read_mkdir_delete_roundtrip(local_files_client):
|
def test_local_mode_upload_read_mkdir_delete_roundtrip(local_files_client):
|
||||||
client, home = local_files_client
|
client, home = local_files_client
|
||||||
folder = home / "workspace"
|
folder = home / "workspace"
|
||||||
|
|||||||
Reference in New Issue
Block a user