Spaces:
Paused
Paused
| import asyncio | |
| from pathlib import Path | |
| from types import SimpleNamespace | |
| import pytest | |
| from fastapi import HTTPException | |
| from src import auth_helpers | |
| def _request(*, current_user="api", api_token=True, api_token_owner="alice"): | |
| return SimpleNamespace( | |
| state=SimpleNamespace( | |
| current_user=current_user, | |
| api_token=api_token, | |
| api_token_owner=api_token_owner, | |
| ), | |
| app=SimpleNamespace( | |
| state=SimpleNamespace( | |
| auth_manager=SimpleNamespace(is_configured=True), | |
| ), | |
| ), | |
| client=SimpleNamespace(host="203.0.113.10"), | |
| ) | |
| def test_require_user_rejects_api_token_pseudo_user(monkeypatch): | |
| monkeypatch.setenv("AUTH_ENABLED", "true") | |
| req = _request() | |
| with pytest.raises(HTTPException) as exc: | |
| auth_helpers.require_user(req) | |
| assert exc.value.status_code == 403 | |
| def test_require_authenticated_request_allows_api_token_owner(monkeypatch): | |
| monkeypatch.setenv("AUTH_ENABLED", "true") | |
| req = _request() | |
| assert auth_helpers.require_authenticated_request(req) == "alice" | |
| def test_codex_as_owner_can_call_nested_user_routes(monkeypatch): | |
| monkeypatch.setenv("AUTH_ENABLED", "true") | |
| from routes.codex_routes import _as_owner | |
| req = _request() | |
| async def nested_handler(request): | |
| return auth_helpers.require_user(request) | |
| assert asyncio.run(_as_owner(req, "alice", nested_handler, req)) == "alice" | |
| assert req.state.current_user == "api" | |
| assert req.state.api_token is True | |
| def test_codex_plugin_downloads_use_general_authenticated_gate(): | |
| source = Path("routes/codex_routes.py").read_text(encoding="utf-8") | |
| assert "require_authenticated_request" in source | |
| assert source.count("require_authenticated_request(request)") == 2 | |