mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-08-28 05:15:00 +00:00
102 lines
3.1 KiB
Python
102 lines
3.1 KiB
Python
"""OpenSpace cloud platform authentication.
|
|
|
|
Resolution order for OPENSPACE_API_KEY:
|
|
1. ``OPENSPACE_API_KEY`` env var
|
|
2. Auto-detect from host agent config (MCP env block)
|
|
3. Empty (caller treats as "not configured").
|
|
|
|
Base URL resolution:
|
|
1. ``OPENSPACE_API_BASE`` env var
|
|
2. Default: ``https://open-space.cloud/api/v1``
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
from typing import Dict, Optional
|
|
|
|
logger = logging.getLogger("openspace.cloud")
|
|
|
|
OPENSPACE_DEFAULT_BASE = "https://open-space.cloud/api/v1"
|
|
|
|
|
|
def get_openspace_auth() -> tuple[Dict[str, str], str]:
|
|
"""Resolve OpenSpace credentials and base URL.
|
|
|
|
Returns:
|
|
``(auth_headers, api_base)`` — headers dict ready for HTTP requests
|
|
and the API base URL. If no credentials are found, ``auth_headers``
|
|
is empty.
|
|
"""
|
|
from openspace.host_detection import read_host_mcp_env
|
|
|
|
auth_headers: Dict[str, str] = {}
|
|
api_base = OPENSPACE_DEFAULT_BASE
|
|
|
|
# Tier 1: env vars
|
|
env_key = os.environ.get("OPENSPACE_API_KEY", "").strip()
|
|
env_base = os.environ.get("OPENSPACE_API_BASE", "").strip()
|
|
|
|
if env_key:
|
|
auth_headers["X-API-Key"] = env_key
|
|
if env_base:
|
|
api_base = env_base.rstrip("/")
|
|
logger.info("OpenSpace auth: using OPENSPACE_API_KEY env var")
|
|
return auth_headers, api_base
|
|
|
|
# Tier 2: host agent config MCP env block
|
|
mcp_env = read_host_mcp_env()
|
|
cfg_key = str(mcp_env.get("OPENSPACE_API_KEY", "")).strip()
|
|
cfg_base = str(mcp_env.get("OPENSPACE_API_BASE", "")).strip()
|
|
|
|
if cfg_key:
|
|
auth_headers["X-API-Key"] = cfg_key
|
|
if cfg_base:
|
|
api_base = cfg_base.rstrip("/")
|
|
logger.info("OpenSpace auth: using OPENSPACE_API_KEY from host agent MCP env config")
|
|
return auth_headers, api_base
|
|
|
|
return auth_headers, api_base
|
|
|
|
|
|
def get_api_base(cli_override: Optional[str] = None) -> str:
|
|
"""Resolve OpenSpace API base URL (for CLI scripts).
|
|
|
|
Priority: ``cli_override`` → env var → host agent config → default.
|
|
"""
|
|
from openspace.host_detection import read_host_mcp_env
|
|
|
|
if cli_override:
|
|
return cli_override.rstrip("/")
|
|
env_base = os.environ.get("OPENSPACE_API_BASE", "").strip()
|
|
if env_base:
|
|
return env_base.rstrip("/")
|
|
mcp_env = read_host_mcp_env()
|
|
cfg_base = str(mcp_env.get("OPENSPACE_API_BASE", "")).strip()
|
|
if cfg_base:
|
|
return cfg_base.rstrip("/")
|
|
return OPENSPACE_DEFAULT_BASE
|
|
|
|
|
|
def get_auth_headers_or_exit() -> Dict[str, str]:
|
|
"""Resolve auth headers for CLI scripts. Exits on failure."""
|
|
import sys
|
|
from openspace.host_detection import read_host_mcp_env
|
|
|
|
env_key = os.environ.get("OPENSPACE_API_KEY", "").strip()
|
|
if env_key:
|
|
return {"X-API-Key": env_key}
|
|
|
|
mcp_env = read_host_mcp_env()
|
|
cfg_key = str(mcp_env.get("OPENSPACE_API_KEY", "")).strip()
|
|
if cfg_key:
|
|
return {"X-API-Key": cfg_key}
|
|
|
|
print(
|
|
"ERROR: No OPENSPACE_API_KEY configured.\n"
|
|
" Register at https://open-space.cloud to obtain a key, then add it to\n"
|
|
" your host agent config in the OpenSpace MCP env block.",
|
|
file=sys.stderr,
|
|
)
|
|
sys.exit(1)
|