from uuid import UUID from db.scanner import Scanner from fastapi import APIRouter, Depends, Request from fastapi.responses import JSONResponse from fastapi_jwt_auth import AuthJWT router = APIRouter() @router.post('/scanner/{uuid}') async def scanner(uuid, data: Request, Authorize: AuthJWT = Depends()): Authorize.jwt_required() json_data = await data.json() if not Scanner.get(uuid=uuid): return JSONResponse(content={"status": "error", "message": "Scanner don't exist."}, status_code=400) if 'targets' in json_data: if isinstance(json_data['targets'], list): Scanner.comment(uuid, json_data['targets']) else: return JSONResponse(content={"status": "error", "message": "Targets should be a list."}, status_code=400) if 'scanner' in json_data: if isinstance(json_data['scanner'], dict): Scanner.comment(uuid, json_data['scanner']) else: return JSONResponse(content={"status": "error", "message": "Scanner should be a dict."}, status_code=400) if 'comment' in json_data: if isinstance(json_data['comment'], str): Scanner.comment(uuid, json_data['comment']) else: return JSONResponse(content={"status": "error", "message": "Comment should be a string."}, status_code=400) if 'enabled' in json_data: if isinstance(json_data['enabled'], bool): if json_data['enabled'] is True: Scanner.enable(uuid) elif json_data['enabled'] is False: Scanner.disable(uuid) else: return JSONResponse(content={"status": "error", "message": "Enabled should be boolean."}, status_code=400) if Scanner.get(uuid=uuid): Scanner.update(uuid, json_data) else: return JSONResponse(content={"status": "error", "message": "Scanner don't exist."}, status_code=400) return JSONResponse(content={"status": "success", "message": "Scanner updated."}, status_code=200) @router.get('/callhome/{uuid}') async def callhome(uuid, data: Request, Authorize: AuthJWT = Depends()): Authorize.jwt_required() try: UUID(uuid).version except ValueError: return JSONResponse(content={"status": "error", "message": "Invalid UUID."}, status_code=400) scanner_data = Scanner.get(uuid=uuid) if scanner_data: if not Scanner.is_enabled(uuid): return JSONResponse(content={"status": "error", "message": "Scanner disabled."}, status_code=400) else: return JSONResponse(content={"status": "success", "data": scanner_data}, status_code=200) else: if Scanner.add(uuid): return JSONResponse(content={"status": "error", "message": "Scanner added but disabled."}, status_code=400) else: return JSONResponse(content={"status": "error", "message": "Failed to add scanner."}, status_code=400)