main
py 54 lines 2.04 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.duo.schema.provision import ProvisionDuoRequest
9 from app.integrations.duo.schema.provision import ProvisionDuoResponse
10 from app.integrations.duo.services.provision import provision_duo
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_duo_provision_router = APIRouter()
16
17
18 @integration_duo_provision_router.post(
19 "/provision",
20 response_model=ProvisionDuoResponse,
21 description="Provision a Duo integration.",
22 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
23 )
24 async def provision_duo_route(
25 provision_duo_request: ProvisionDuoRequest,
26 session: AsyncSession = Depends(get_db),
27 ) -> ProvisionDuoResponse:
28 """
29 Provisions a duo integration.
30
31 Args:
32 provision_duo_request (ProvisionDuoRequest): 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 ProvisionDuoResponse: 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_duo_request.customer_code,
41 session,
42 )
43 await provision_duo(provision_duo_request, session)
44 await add_scheduler_jobs(
45 CreateSchedulerRequest(
46 function_name="invoke_duo_integration_collect",
47 time_interval=provision_duo_request.time_interval,
48 job_id="invoke_duo_integration_collect",
49 ),
50 )
51 return ProvisionDuoResponse(
52 success=True,
53 message="Duo integration provisioned successfully.",
54 )