diff options
author | Kristofer Hallin <kristofer@sunet.se> | 2022-01-05 11:46:15 +0100 |
---|---|---|
committer | Kristofer Hallin <kristofer@sunet.se> | 2022-01-05 11:46:15 +0100 |
commit | 571997129ba5275cc5e148a8ac1c0f64d895a9ef (patch) | |
tree | 607fd13bbbf5ac38f416da8172e89a5d3331d1d8 /src/routers/scanner.py | |
parent | 09677d03635da2b799cf117b2127c3b197a8babf (diff) |
Added database and API endpoints for scanners.
Diffstat (limited to 'src/routers/scanner.py')
-rw-r--r-- | src/routers/scanner.py | 85 |
1 files changed, 81 insertions, 4 deletions
diff --git a/src/routers/scanner.py b/src/routers/scanner.py index 956153b..9bb0f98 100644 --- a/src/routers/scanner.py +++ b/src/routers/scanner.py @@ -1,3 +1,6 @@ +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 @@ -5,12 +8,86 @@ from fastapi_jwt_auth import AuthJWT router = APIRouter() -@router.get('/callhome') -async def callhome(data: Request, Authorize: AuthJWT = Depends()): +@router.post('/scanner/{uuid}') +async def scanner(uuid, data: Request, Authorize: AuthJWT = Depends()): Authorize.jwt_required() json_data = await data.json() - if 'uuid' not in json_data: + if not Scanner.get(uuid=uuid): return JSONResponse(content={"status": "error", - "message": "UUID missing"}) + "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": "success", + "message": "Scanner added."}, + status_code=200) + else: + return JSONResponse(content={"status": "error", + "message": "Failed to add scanner."}, + status_code=400) |