Skip to content

Commit 8d67598

Browse files
author
Glenn Snyder
committed
2 parents ae25596 + a3156b7 commit 8d67598

File tree

4 files changed

+125
-12
lines changed

4 files changed

+125
-12
lines changed

blackduck/HubRestApi.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,12 @@ def get_auth_token(self):
140140
verify=not self.config['insecure']
141141
)
142142
csrf_token = response.headers['X-CSRF-TOKEN']
143-
bearer_token = json.loads(response.content.decode('utf-8'))['bearerToken']
143+
try:
144+
bearer_token = json.loads(response.content.decode('utf-8'))['bearerToken']
145+
except json.decoder.JSONDecodeError as e:
146+
import traceback
147+
traceback.print_exc()
148+
raise Exception("Failed to obtain bearer token, check for valid authentucation token")
144149
return (bearer_token, csrf_token, None)
145150
else:
146151
authendpoint="/j_spring_security_check"
@@ -1677,4 +1682,9 @@ def execute_post(self, url, data, custom_headers={}):
16771682
response = requests.post(url, headers=headers, data=json_data, verify = not self.config['insecure'])
16781683
return response
16791684

1680-
1685+
def get_matched_components(self, version_obj, limit=9999):
1686+
url = "{}/matched-files".format(version_obj['_meta']['href'])
1687+
param_string = self._get_parameter_string({'limit': limit})
1688+
url = "{}{}".format(url, param_string)
1689+
response = self.execute_get(url)
1690+
return response.json()

examples/custom_signatures_import.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,21 @@ def read_metadata_file(metadata_path):
6060
def create_projects(hub, metadata):
6161
for project_name in metadata['content']:
6262
for version_name in metadata['content'][project_name]:
63-
version = hub.get_or_create_project_version(project_name, version_name)
64-
project = hub.get_project_by_name(project_name)
65-
if not project['customSignatureEnabled']:
66-
print ("Enabling custom signature for {}".format(project['name']))
67-
project['customSignatureEnabled'] = True
68-
response = hub.update_project_settings(project, new_settings=project)
69-
print (response)
70-
else:
71-
print ("Custom signature for {} already enabled".format(project_name))
63+
try:
64+
version = hub.get_or_create_project_version(project_name, version_name)
65+
except:
66+
print ("Failed to create project {} version {}".format(project_name, version_name))
67+
try:
68+
project = hub.get_project_by_name(project_name)
69+
if not project['customSignatureEnabled']:
70+
print ("Enabling custom signature for {}".format(project['name']))
71+
project['customSignatureEnabled'] = True
72+
response = hub.update_project_settings(project, new_settings=project)
73+
print (response)
74+
else:
75+
print ("Custom signature for {} already enabled".format(project_name))
76+
except:
77+
print ("Failed to set custom signature flag for {}".format(project_name))
7278

7379
def upload_scan_data(hub, workdir):
7480
with (os.scandir(workdir)) as entries:
@@ -131,7 +137,7 @@ def main(argv=None): # IGNORE:C0111
131137
return 0
132138
except Exception as e:
133139
import traceback
134-
traceback.print_exc()
140+
traceback.print_stack()
135141
if DEBUG or TESTRUN:
136142
raise(e)
137143
indent = len(program_name) * " "

examples/generate_confidence_score.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env python
2+
3+
import argparse
4+
import json
5+
import logging
6+
import sys
7+
8+
from blackduck.HubRestApi import HubInstance
9+
10+
parser = argparse.ArgumentParser("Generate Confidence Score Report")
11+
parser.add_argument("project_name")
12+
parser.add_argument("version")
13+
14+
args = parser.parse_args()
15+
16+
17+
hub = HubInstance()
18+
19+
project = hub.get_project_by_name(args.project_name)
20+
version = hub.get_version_by_name(project, args.version)
21+
22+
result = hub.get_matched_components(version)
23+
print(json.dumps(result))
24+
25+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#!/usr/bin/env python
2+
3+
import argparse
4+
import json
5+
import csv
6+
import logging
7+
import sys
8+
9+
from blackduck.HubRestApi import HubInstance
10+
11+
12+
parser = argparse.ArgumentParser("Retreive BOM component license information for the given project and version")
13+
parser.add_argument("project_name")
14+
parser.add_argument("version")
15+
16+
args = parser.parse_args()
17+
18+
19+
hub = HubInstance()
20+
21+
project = hub.get_project_by_name(args.project_name)
22+
version = hub.get_version_by_name(project, args.version)
23+
24+
bom_components = hub.get_version_components(version)
25+
26+
all_origins = dict()
27+
28+
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', stream=sys.stderr, level=logging.DEBUG)
29+
logging.getLogger("requests").setLevel(logging.WARNING)
30+
logging.getLogger("urllib3").setLevel(logging.WARNING)
31+
32+
all_origin_info = {}
33+
components_info = [["Component Name", "Component Version" ,"Homepage", "Approval Status", "Component ID", "Component Version ID", "License"]]
34+
35+
for bom_component in bom_components['items']:
36+
component_url = bom_component['component']
37+
response = hub.execute_get(component_url)
38+
39+
# Component details include the home page url and additional home pages
40+
logging.debug("Retrieving component home page info for {}:{}".format(
41+
bom_component.get("componentName"), bom_component.get("componentVersionName")))
42+
component_details = None
43+
if response.status_code == 200:
44+
component_details = response.json()
45+
46+
for origin in bom_component.get('origins', []):
47+
logging.debug("Retrieving origin details for origin {}".format(origin['name']))
48+
origin_url = hub.get_link(origin, 'origin')
49+
response = hub.execute_get(origin_url)
50+
origin_details = None
51+
if response.status_code == 200:
52+
origin_details = response.json()
53+
54+
all_origin_info.update({
55+
"{}:{}".format(bom_component['componentName'], bom_component['componentVersionName']): {
56+
"component_details": component_details,
57+
"component_home_page": component_details.get("url"),
58+
"additional_home_pages": component_details.get("additionalHomepages"),
59+
"origin_details": origin_details,
60+
}
61+
})
62+
#component_info = [bom_component['componentName'], bom_component['componentVersionName'], component_details.get("url"), component_details['approvalStatus'], bom_component['component'], bom_component['componentVersion'], origin_details['license']['licenseDisplay']]
63+
component_info = [bom_component.get("componentName"), bom_component.get("componentVersionName"), component_details.get("url"), bom_component.get("approvalStatus"), bom_component.get("component"), bom_component.get("componentVersion"), origin_details.get('license').get("licenseDisplay")]
64+
components_info.append(component_info)
65+
66+
mycsv = csv.writer(open(r'Report.csv', 'w'), lineterminator='\n')
67+
for row in components_info:
68+
if any(row):
69+
mycsv.writerow(row)
70+
print("Report.csv is successfully generated")
71+
#print(json.dumps(all_origin_info))
72+

0 commit comments

Comments
 (0)