diff options
Diffstat (limited to 'src/routers/scanner.py')
-rw-r--r-- | src/routers/scanner.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/routers/scanner.py b/src/routers/scanner.py new file mode 100644 index 0000000..645cd74 --- /dev/null +++ b/src/routers/scanner.py @@ -0,0 +1,93 @@ +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'], str): + Scanner.comment(uuid, json_data['targets']) + else: + return JSONResponse(content={"status": "error", + "message": "Targets should be a string."}, + status_code=400) + if 'scanner' in json_data: + if isinstance(json_data['comment'], str): + Scanner.comment(uuid, json_data['scanner']) + else: + return JSONResponse(content={"status": "error", + "message": "Scanner should be a string."}, + 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) + + +@router.get('/callhome/{uuid}') +async def callhome(uuid, data: Request, Authorize: AuthJWT = Depends()): + Authorize.jwt_required() + + raw_jwt = Authorize.get_raw_jwt() + + if 'user' not in raw_jwt or raw_jwt['user'] != "scanner": + return JSONResponse(content={"status": "error", + "message": "Invalid token type."}, + status_code=400) + + 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) |