79 lines
3.3 KiB
Python
79 lines
3.3 KiB
Python
import importlib.util
|
|
from pathlib import Path
|
|
|
|
|
|
def _load_proxy_module():
|
|
path = Path("/Users/hermes/.hermes/scripts/openwebui_runs_proxy.py")
|
|
spec = importlib.util.spec_from_file_location("openwebui_runs_proxy", path)
|
|
module = importlib.util.module_from_spec(spec)
|
|
assert spec and spec.loader
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
def test_live_verified_email_handoff_requires_exact_match(monkeypatch):
|
|
proxy = _load_proxy_module()
|
|
|
|
class _Store:
|
|
def bound_email_matches_source(self, source, email, explicit_user_requested=False):
|
|
return email == "vivian@bremen.com.tw"
|
|
|
|
def get_verified_email_for_source(self, source):
|
|
return "vivian@bremen.com.tw"
|
|
|
|
monkeypatch.setattr("gateway.user_verification.GatewayUserStore", lambda: _Store())
|
|
|
|
identity = {"user_id": "openwebui-user-42", "name": "Vivian"}
|
|
assert proxy._resolve_live_verified_email_for_handoff(identity, "vivian@bremen.com.tw") == "vivian@bremen.com.tw"
|
|
assert proxy._resolve_live_verified_email_for_handoff(identity, "dk96@bremen.com.tw") is None
|
|
|
|
|
|
def test_live_verified_email_handoff_fails_closed_without_runtime_identity():
|
|
proxy = _load_proxy_module()
|
|
assert proxy._resolve_live_verified_email_for_handoff({}, "vivian@bremen.com.tw") is None
|
|
|
|
|
|
def test_upstream_identity_headers_include_standardized_identity_fields():
|
|
proxy = _load_proxy_module()
|
|
headers = proxy._upstream_identity_headers(
|
|
{
|
|
"user_id": "openwebui-user-42",
|
|
"user_email": "Vivian@Bremen.com.tw",
|
|
"name": "Vivian",
|
|
},
|
|
session_key="stable-session-key",
|
|
)
|
|
assert headers["X-Hermes-Session-Key"] == "stable-session-key"
|
|
assert headers["X-Hermes-User-Id"] == "openwebui-user-42"
|
|
assert headers["X-Hermes-User-Email"] == "vivian@bremen.com.tw"
|
|
assert headers["X-Hermes-User-Name"] == "Vivian"
|
|
|
|
|
|
def test_extract_download_link_mode_accepts_top_level_and_metadata_hermes():
|
|
proxy = _load_proxy_module()
|
|
assert proxy._extract_download_link_mode({"download_link_mode": "public"}) == "public"
|
|
assert proxy._extract_download_link_mode({"metadata": {"hermes": {"download_link_mode": "private"}}}) == "private"
|
|
|
|
|
|
def test_rewrite_local_paths_to_download_links_passes_owner_metadata_and_link_mode(monkeypatch):
|
|
proxy = _load_proxy_module()
|
|
seen = {}
|
|
|
|
def _fake_build_public_download_url(path, *, owner_metadata=None, link_mode=None):
|
|
seen["path"] = path
|
|
seen["owner_metadata"] = owner_metadata
|
|
seen["link_mode"] = link_mode
|
|
return "https://hermesadmin.bremen.com.tw/downloads/s-demo"
|
|
|
|
monkeypatch.setattr(proxy, "build_public_download_url", _fake_build_public_download_url)
|
|
rewritten, links = proxy._rewrite_local_paths_to_download_links(
|
|
"/Users/hermes/result.pdf",
|
|
owner_metadata={"email": "vivian@bremen.com.tw", "external_user_id": "openwebui-user-42"},
|
|
link_mode="private",
|
|
)
|
|
assert rewritten == "[result.pdf](https://hermesadmin.bremen.com.tw/downloads/s-demo)"
|
|
assert links == [("result.pdf", "https://hermesadmin.bremen.com.tw/downloads/s-demo")]
|
|
assert seen["path"] == "/Users/hermes/result.pdf"
|
|
assert seen["owner_metadata"]["email"] == "vivian@bremen.com.tw"
|
|
assert seen["link_mode"] == "private"
|