Files
aitbc/apps/coordinator-api/src/app/deps.py
oib 15427c96c0 chore: update file permissions to executable across repository
- Change file mode from 644 to 755 for all project files
- Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet"
- Rename Miner.extra_meta_data to extra_metadata for consistency
2026-03-06 22:17:54 +01:00

74 lines
2.4 KiB
Python
Executable File

"""
Dependency injection module for AITBC Coordinator API
Provides unified dependency injection using storage.SessionDep.
"""
from typing import Callable
from fastapi import Depends, Header, HTTPException
from .config import settings
from .storage import SessionDep
def _validate_api_key(allowed_keys: list[str], api_key: str | None) -> str:
# In development mode, allow any API key for testing
import os
if os.getenv('APP_ENV', 'dev') == 'dev':
print(f"DEBUG: Development mode - allowing API key '{api_key}'")
return api_key or "dev_key"
allowed = {key.strip() for key in allowed_keys if key}
if not api_key or api_key not in allowed:
raise HTTPException(status_code=401, detail="invalid api key")
return api_key
def require_client_key() -> Callable[[str | None], str]:
"""Dependency for client API key authentication (reads live settings)."""
def validator(api_key: str | None = Header(default=None, alias="X-Api-Key")) -> str:
return _validate_api_key(settings.client_api_keys, api_key)
return validator
def require_miner_key() -> Callable[[str | None], str]:
"""Dependency for miner API key authentication (reads live settings)."""
def validator(api_key: str | None = Header(default=None, alias="X-Api-Key")) -> str:
return _validate_api_key(settings.miner_api_keys, api_key)
return validator
def get_miner_id() -> Callable[[str | None], str]:
"""Dependency to get miner ID from X-Miner-ID header."""
def validator(miner_id: str | None = Header(default=None, alias="X-Miner-ID")) -> str:
if not miner_id:
raise HTTPException(status_code=400, detail="X-Miner-ID header required")
return miner_id
return validator
def require_admin_key() -> Callable[[str | None], str]:
"""Dependency for admin API key authentication (reads live settings)."""
def validator(api_key: str | None = Header(default=None, alias="X-Api-Key")) -> str:
print(f"DEBUG: Received API key: {api_key}")
print(f"DEBUG: Allowed admin keys: {settings.admin_api_keys}")
result = _validate_api_key(settings.admin_api_keys, api_key)
print(f"DEBUG: Validation result: {result}")
return result
return validator
# Legacy aliases for backward compatibility
def get_session():
"""Legacy alias - use SessionDep instead."""
from .storage import get_session
return get_session()