summaryrefslogtreecommitdiff
path: root/src/routers/scanner.py
blob: 3296b83885733f2d8ca88cafc28ce7c46cccaa9a (plain)
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)