main
py 54 lines 2.19 KB
Raw
1 from fastapi import APIRouter
2 from fastapi import Depends
3 from fastapi import Security
4 from sqlalchemy.ext.asyncio import AsyncSession
5
6 from app.auth.routes.auth import AuthHandler
7 from app.db.db_session import get_db
8 from app.integrations.darktrace.schema.provision import ProvisionDarktraceRequest
9 from app.integrations.darktrace.schema.provision import ProvisionDarktraceResponse
10 from app.integrations.darktrace.services.provision import provision_darktrace
11 from app.integrations.utils.utils import get_customer_integration_response
12 from app.schedulers.models.scheduler import CreateSchedulerRequest
13 from app.schedulers.scheduler import add_scheduler_jobs
14
15 integration_darktrace_provision_router = APIRouter()
16
17
18 @integration_darktrace_provision_router.post(
19 "/provision",
20 response_model=ProvisionDarktraceResponse,
21 description="Provision a Darktrace integration.",
22 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
23 )
24 async def provision_darktrace_route(
25 provision_darktrace_request: ProvisionDarktraceRequest,
26 session: AsyncSession = Depends(get_db),
27 ) -> ProvisionDarktraceResponse:
28 """
29 Provisions a darktrace integration.
30
31 Args:
32 provision_darktrace_request (ProvisionDarktraceRequest): The request object containing the necessary data for provisioning.
33 session (AsyncSession, optional): The database session. Defaults to Depends(get_db).
34
35 Returns:
36 ProvisionDarktraceResponse: The response object indicating the success or failure of the provisioning process.
37 """
38 # Check if the customer integration settings are available and can be provisioned
39 await get_customer_integration_response(
40 provision_darktrace_request.customer_code,
41 session,
42 )
43 await provision_darktrace(provision_darktrace_request, session)
44 await add_scheduler_jobs(
45 CreateSchedulerRequest(
46 function_name="invoke_darktrace_integration_collect",
47 time_interval=provision_darktrace_request.time_interval,
48 job_id="invoke_darktrace_integration_collect",
49 ),
50 )
51 return ProvisionDarktraceResponse(
52 success=True,
53 message="Darktrace integration provisioned successfully.",
54 )