summaryrefslogtreecommitdiff
path: root/src/routers/scanner.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/routers/scanner.py')
-rw-r--r--src/routers/scanner.py93
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)