/
import_scan.py
73 lines (49 loc) · 2.66 KB
/
import_scan.py
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
import requests
import argparse
def _login(session: requests.Session, base_url, email, password):
print("Login to Faraday")
url = f"{base_url}/_api/login"
credentials = {"email": email, "password": password}
response = session.post(url, json=credentials)
response.raise_for_status()
return response
def exists_workspaces(faraday_session, base_url, workspace):
print(f"Checking if workspace {workspace} exists")
response = faraday_session.get(f"{base_url}/_api/v2/ws/")
cluster = response.json()
return [ws for ws in cluster if ws.get('name', None) == workspace] != []
def create_workspace(faraday_session, base_url, email, workspace):
print(f"Workspace {workspace} doesn't exists. Creating it")
url = f"{base_url}/_api/v2/ws/"
body = {"_id": workspace, "name": workspace, "type": "Workspace", "users": [email]}
response = faraday_session.post(url, json=body)
response.raise_for_status()
return response.json()
def upload_report(faraday_session, base_url, workspace, file_name):
print(f"Uploading report in workspace {workspace}.")
csrf_url = f"{base_url}/_api/session"
url = f"{base_url}/_api/v2/ws/{workspace}/upload_report"
files = {"file": open(file_name, 'r')}
csrf_token = faraday_session.get(csrf_url).json().get('csrf_token')
body = {"csrf_token": csrf_token}
response = faraday_session.post(url, data=body, files=files)
response.raise_for_status()
return response.json()
def import_scan(base_url, email, password, workspace, file_name):
print(f'Importing scan from {file_name}')
faraday_session = requests.Session()
_login(faraday_session, base_url, email, password)
ws_exists = exists_workspaces(faraday_session, base_url, workspace)
if not ws_exists:
create_workspace(faraday_session, base_url, email, workspace)
upload_report(faraday_session, base_url, workspace, file_name)
print('Report uploaded successfully')
parser = argparse.ArgumentParser()
parser.add_argument('-b', '--base_url', metavar='base_url', type=str, help='Base url for FaradayServer server (example: http://10.20.30.40:8080)')
parser.add_argument('-e', '--email', metavar='email', type=str, help="Faraday email")
parser.add_argument('-p', '--password', metavar='password', type=str, help="Faraday password")
parser.add_argument('-f', '--file_name', metavar='file_name', type=str, help='File name for XML report')
parser.add_argument('-w', '--workspace', metavar='workspace', type=str, help='Workspace where the report will be uploaded')
args = parser.parse_args()
if __name__ == "__main__":
import_scan(args.base_url, args.email, args.password, args.workspace, args.file_name)