@@ -213,6 +213,12 @@ def get_link(self, bd_rest_obj, link_name):
213213 else :
214214 logging .debug ("This does not appear to be a BD REST object. It should have ['_meta']['links']" )
215215
216+ def get_limit_paramstring (self , limit ):
217+ return "?limit={}" .format (limit )
218+
219+ def get_apibase (self ):
220+ return self .config ['baseurl' ] + "/api"
221+
216222 ###
217223 #
218224 # Role stuff
@@ -484,26 +490,18 @@ def find_component_info_for_protex_component(self, protex_component_id, protex_c
484490 else :
485491 return component_list_d ['items' ]
486492
487- def get_limit_paramstring (self , limit ):
488- return "?limit={}" .format (limit )
489-
490- def get_apibase (self ):
491- return self .config ['baseurl' ] + "/api"
492-
493- def get_version_by_name (self , project , version_name ):
494- version_list = self .get_project_versions (project )
495- for version in version_list ['items' ]:
496- if version ['versionName' ] == version_name :
497- return version
498-
499- def _get_version_link (self , version , link_type ):
500- # if link_type == 'licenseReports':
501- # version_id = version['_meta']['href'].split("/")[-1]
502- # return self.get_urlbase() + "/api/v1/versions/{}/reports".format(version_id)
503- # else:
504- for link in version ['_meta' ]['links' ]:
505- if link ['rel' ] == link_type :
506- return link ['href' ]
493+ def get_vulnerable_bom_components (self , version_obj , limit = 9999 ):
494+ url = "{}/vulnerable-bom-components" .format (version_obj ['_meta' ]['href' ])
495+ custom_headers = {'Content-Type' : 'application/vnd.blackducksoftware.bill-of-materials-4+json' }
496+ param_string = self ._get_parameter_string ({'limit' : limit })
497+ url = "{}{}" .format (url , param_string )
498+ response = self .execute_get (url , custom_headers = custom_headers )
499+ if response .status_code == 200 :
500+ vulnerable_bom_components = response .json ()
501+ return vulnerable_bom_components
502+ else :
503+ logging .warning ("Failed to retrieve vulnerable bom components for project {}, status code {}" .format (
504+ version_obj , response .status_code ))
507505
508506 ##
509507 #
@@ -524,7 +522,7 @@ def create_version_reports(self, version, report_list, format="CSV"):
524522 'reportType' : 'VERSION' ,
525523 'reportFormat' : format
526524 }
527- version_reports_url = self ._get_version_link (version , 'versionReport' )
525+ version_reports_url = self .get_link (version , 'versionReport' )
528526 return self .execute_post (version_reports_url , post_data )
529527
530528 valid_notices_formats = ["TEXT" , "HTML" ]
@@ -537,7 +535,7 @@ def create_version_notices_report(self, version, format="TEXT"):
537535 'reportType' : 'VERSION_LICENSE' ,
538536 'reportFormat' : format
539537 }
540- notices_report_url = self ._get_version_link (version , 'licenseReports' )
538+ notices_report_url = self .get_link (version , 'licenseReports' )
541539 return self .execute_post (notices_report_url , post_data )
542540
543541 def download_report (self , report_id ):
@@ -788,20 +786,22 @@ def get_project_by_name(self, project_name):
788786 if project ['name' ] == project_name :
789787 return project
790788
789+ def get_version_by_name (self , project , version_name ):
790+ version_list = self .get_project_versions (project , parameters = {'q' :"versionName:{}" .format (version_name )})
791+ # A query by name can return more than one version if other versions
792+ # have names that include the search term as part of their name
793+ for version in version_list ['items' ]:
794+ if version ['versionName' ] == version_name :
795+ return version
796+
791797 def get_project_version_by_name (self , project_name , version_name ):
792798 project = self .get_project_by_name (project_name )
793799 if project :
794- project_versions = self .get_project_versions (
795- project ,
796- parameters = {'q' :"versionName:{}" .format (version_name )}
797- )
798- # A query by name can return more than one version if other versions
799- # have names that include the search term as part of their name
800- for project_version in project_versions ['items' ]:
801- if project_version ['versionName' ] == version_name :
802- logging .debug ("Found matching version: {}" .format (project_version ))
803- return project_version
804- logging .debug ("Did not find any project version matching {}" .format (version_name ))
800+ version = self .get_version_by_name (project , version_name )
801+ if version == None :
802+ logging .debug ("Did not find any project version matching {}" .format (version_name ))
803+ else :
804+ return version
805805 else :
806806 logging .debug ("Did not find a project with name {}" .format (project_name ))
807807
0 commit comments