3M/cef_3M/endpoints/alerts.py
2024-07-17 14:34:01 +00:00

51 lines
1.7 KiB
Python

from fastapi import Request, Depends
from starlette.responses import JSONResponse
from . import router
from .. import JWTBearer
from ..sql import SessionMaker, AlertEndpoints
from ..util import redis
from pydantic import BaseModel, create_model, HttpUrl
class SubscriptionData(BaseModel):
endpoint: HttpUrl
keys: create_model("keys", auth=(str, ...), p256dh=(str, ...))
@router.post("/alert/register", dependencies=[Depends(JWTBearer())])
async def register(request: Request, subscription: SubscriptionData):
session = SessionMaker()
check = session.query(AlertEndpoints).filter(AlertEndpoints.url == str(subscription.endpoint))
if check.first() is not None:
return JSONResponse({
"success": True
})
info = AlertEndpoints(username=request.state.jwt["account"], url=str(subscription.endpoint), auth=subscription.keys.auth, p256dh=subscription.keys.p256dh)
session.merge(info)
session.commit()
return JSONResponse({
"success": True
})
@router.post("/alert/unregister", dependencies=[Depends(JWTBearer())])
async def unregister(request: Request):
session = SessionMaker()
body = await request.json()
session.query(AlertEndpoints).filter(AlertEndpoints.url == body.get("url", ""), AlertEndpoints.username == request.state.jwt["account"]).delete()
session.commit()
return JSONResponse({
"success": True
})
@router.post("/alert/clear", dependencies=[Depends(JWTBearer())])
async def clear(request: Request):
session = SessionMaker()
session.query(AlertEndpoints).filter(AlertEndpoints.username == request.state.jwt["account"]).delete()
session.commit()
return JSONResponse({
"success": True
})