from __future__ import annotations from typing import Any from fastapi import APIRouter, Depends from ..connectors.nginx_proxy_manager import NginxProxyManagerConnector from .connector_runtime import load_connector_runtime router = APIRouter(prefix='/api/apps/nginx-proxy-manager', dependencies=[Depends(load_connector_runtime)]) alias_router = APIRouter(prefix='/api/apps/npm', dependencies=[Depends(load_connector_runtime)]) def _shape(payload: dict[str, Any]) -> dict[str, Any]: data = payload.get('data') if not isinstance(data, dict): data = {key: value for key, value in payload.items() if key not in {'success', 'status', 'message'}} return { **payload, 'success': bool(payload.get('success')), 'status': str(payload.get('status', 'ok')), 'message': str(payload.get('message', 'ok')), 'data': data, } def _connector() -> NginxProxyManagerConnector: return NginxProxyManagerConnector() @router.get('/health') def health(): return _shape(_connector().health()) @router.get('/proxy-hosts') def proxy_hosts(): return _shape(_connector().proxy_hosts()) @router.get('/certificates') def certificates(): return _shape(_connector().certificates()) @router.get('/certificates/expiring') def expiring_certificates(days: int = 30): return _shape(_connector().expiring_certificates(days)) @router.get('/access-lists') def access_lists(): return _shape(_connector().access_lists()) @router.get('/exposure-summary') def exposure_summary(): return _shape(_connector().exposure_summary()) @router.get('/host-reachability') def host_reachability(): return _shape(_connector().host_reachability()) @router.get('/security-warnings') def security_warnings(): return _shape(_connector().security_warnings()) @alias_router.get('/health') def alias_health(): return health() @alias_router.get('/proxy-hosts') def alias_proxy_hosts(): return proxy_hosts() @alias_router.get('/certificates') def alias_certificates(): return certificates() @alias_router.get('/certificates/expiring') def alias_expiring_certificates(days: int = 30): return expiring_certificates(days) @alias_router.get('/access-lists') def alias_access_lists(): return access_lists() @alias_router.get('/exposure-summary') def alias_exposure_summary(): return exposure_summary() @alias_router.get('/host-reachability') def alias_host_reachability(): return host_reachability() @alias_router.get('/security-warnings') def alias_security_warnings(): return security_warnings()