No Description

mvp.py 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from __future__ import annotations
  2. from typing import Any, Awaitable, Callable
  3. from fastapi import APIRouter, Depends
  4. from app.models import ApiResponse, MvpIncidentIngestRequest, MvpIocEvaluateRequest, MvpVpnEvaluateRequest
  5. from app.services.mvp_service import MvpService
  6. def build_mvp_router(
  7. mvp_service: MvpService,
  8. require_internal_key: Callable[..., Awaitable[None]],
  9. ) -> APIRouter:
  10. router = APIRouter(prefix="/mvp", tags=["mvp"])
  11. @router.post("/incidents/ingest", response_model=ApiResponse, dependencies=[Depends(require_internal_key)])
  12. async def ingest_incident(payload: MvpIncidentIngestRequest) -> ApiResponse:
  13. result = await mvp_service.ingest_incident(payload.model_dump(mode="json"))
  14. return ApiResponse(data=result)
  15. @router.post("/ioc/evaluate", response_model=ApiResponse, dependencies=[Depends(require_internal_key)])
  16. async def evaluate_ioc(payload: MvpIocEvaluateRequest) -> ApiResponse:
  17. result = await mvp_service.evaluate_ioc(payload.model_dump(mode="json"))
  18. return ApiResponse(data=result)
  19. @router.post("/vpn/evaluate", response_model=ApiResponse, dependencies=[Depends(require_internal_key)])
  20. async def evaluate_vpn(payload: MvpVpnEvaluateRequest) -> ApiResponse:
  21. result = await mvp_service.evaluate_vpn(payload.model_dump(mode="json"))
  22. return ApiResponse(data=result)
  23. @router.get("/config/policies", response_model=ApiResponse)
  24. async def get_policies() -> ApiResponse:
  25. data = mvp_service.repo.get_policy()
  26. return ApiResponse(data={"policy": data})
  27. @router.put("/config/policies", response_model=ApiResponse, dependencies=[Depends(require_internal_key)])
  28. async def update_policies(payload: dict[str, Any]) -> ApiResponse:
  29. data = mvp_service.repo.update_policy(payload)
  30. return ApiResponse(data={"policy": data})
  31. @router.get("/health/dependencies", response_model=ApiResponse)
  32. async def dependency_health() -> ApiResponse:
  33. data = await mvp_service.dependency_health()
  34. return ApiResponse(data={"dependencies": data})
  35. return router