1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
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)
|