main
py 58 lines 2.57 KB
Raw
1 from fastapi import APIRouter
2 from fastapi import Security
3 from loguru import logger
4
5 from app.auth.utils import AuthHandler
6 from app.stack_provisioning.graylog.schema.provision import (
7 AvailableContentPacksResponse,
8 )
9 from app.stack_provisioning.graylog.schema.provision import AvailbleContentPacksOverview
10 from app.stack_provisioning.graylog.schema.provision import ProvisionContentPackRequest
11 from app.stack_provisioning.graylog.schema.provision import ProvisionGraylogResponse
12 from app.stack_provisioning.graylog.services.provision import check_pipeline_rules
13 from app.stack_provisioning.graylog.services.provision import provision_content_pack
14 from app.stack_provisioning.graylog.services.utils import does_content_pack_exist
15 from app.stack_provisioning.graylog.services.utils import system_version_check
16
17 stack_provisioning_graylog_router = APIRouter()
18
19
20 @stack_provisioning_graylog_router.get(
21 "/graylog/available/content_packs",
22 response_model=AvailableContentPacksResponse,
23 description="Get the available content packs for provisioning in Graylog",
24 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
25 )
26 async def get_available_content_packs_route() -> AvailableContentPacksResponse:
27 """
28 Get the available content packs for provisioning in Graylog
29 """
30 logger.info("Getting available content packs...")
31 return AvailableContentPacksResponse(
32 available_content_packs=[{"name": pack.name, "description": pack.value} for pack in AvailbleContentPacksOverview],
33 success=True,
34 message="Available content packs retrieved successfully",
35 )
36
37
38 @stack_provisioning_graylog_router.post(
39 "/graylog/provision/content_pack",
40 response_model=ProvisionGraylogResponse,
41 description="Provision the Content Pack in the Graylog instance",
42 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
43 )
44 async def provision_content_pack_route(
45 content_pack_request: ProvisionContentPackRequest,
46 ) -> ProvisionGraylogResponse:
47 """
48 Provision the Content Pack in the Graylog instance
49 """
50 logger.info(f"Provisioning content pack {content_pack_request.content_pack_name.name}...")
51 await system_version_check(compatible_version="5.0.13+083613e")
52 await does_content_pack_exist(content_pack_name=content_pack_request.content_pack_name.name)
53 await provision_content_pack(content_pack_request)
54 await check_pipeline_rules()
55 return ProvisionGraylogResponse(
56 success=True,
57 message=f"{content_pack_request.content_pack_name.name} Content Pack provisioned successfully",
58 )