main
py 54 lines 1.9 KB
Raw
1 from fastapi import APIRouter
2 from fastapi import Depends
3 from fastapi import Security
4 from loguru import logger
5 from sqlalchemy.ext.asyncio import AsyncSession
6
7 from app.auth.utils import AuthHandler
8 from app.connectors.sublime.schema.alerts import AlertRequestBody
9 from app.connectors.sublime.schema.alerts import AlertResponseBody
10 from app.connectors.sublime.schema.alerts import SublimeAlertsResponse
11 from app.connectors.sublime.services.alerts import collect_alerts
12 from app.connectors.sublime.services.alerts import store_sublime_alert
13 from app.db.db_session import get_db
14
15 sublime_alerts_router = APIRouter()
16
17
18 @sublime_alerts_router.post(
19 "/alert",
20 description="Receive alert from Sublime and store it in the database",
21 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
22 )
23 async def receive_sublime_alert(
24 alert_request_body: AlertRequestBody,
25 session: AsyncSession = Depends(get_db),
26 ) -> AlertResponseBody:
27 """
28 Endpoint to store alert in the `sublimealerts` table.
29 Invoked by the Sublime alert webhook which is configured in the Sublime UI.
30
31 Returns:
32 jsonify: A JSON response containing if the alert was stored successfully.
33 """
34 logger.info(f"Received alert from Sublime: {alert_request_body}")
35 return await store_sublime_alert(session, alert_request_body)
36
37
38 @sublime_alerts_router.get(
39 "/alerts",
40 response_model=SublimeAlertsResponse,
41 description="Get all alerts",
42 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
43 )
44 async def get_sublime_alerts(
45 session: AsyncSession = Depends(get_db),
46 ) -> SublimeAlertsResponse:
47 """
48 Endpoint to retrieve alerts from the `sublimealerts` table.
49
50 Returns:
51 jsonify: A JSON response containing all the alerts stored in the `sublimealerts` table.
52 """
53 logger.info("Fetching all alerts from Sublime")
54 return await collect_alerts(session)