@@ -243,8 +243,8 @@ def _get_role_url(self):
243
243
def get_roles (self , parameters = {}):
244
244
url = self ._get_role_url () + self ._get_parameter_string (parameters )
245
245
response = self .execute_get (url )
246
- return response .json ()
247
-
246
+ return response .json ()
247
+
248
248
def get_roles_url_from_user_or_group (self , user_or_group ):
249
249
# Given a user or user group object, return the 'roles' url
250
250
roles_url = None
@@ -358,6 +358,14 @@ def reset_user_password(self, user_id, new_password):
358
358
headers = {'Content-Type' :'application/vnd.blackducksoftware.user-1+json' , 'Accept' : 'application/json' }
359
359
data = {'password' : new_password }
360
360
return self .execute_put (url , data , headers )
361
+
362
+ def get_last_login (self ,sinceDays = 60 ):
363
+ url = self .config ['baseurl' ] + "/api/dormant-users"
364
+ param_string = self ._get_parameter_string ({'sinceDays' : sinceDays })
365
+ url = "{}{}" .format (url , param_string )
366
+ headers = {'Accept' : 'application/vnd.blackducksoftware.user-4+json' }
367
+ response = self .execute_get (url , custom_headers = headers )
368
+ return response .json ()
361
369
362
370
###
363
371
#
@@ -374,8 +382,8 @@ def get_user_groups(self, parameters={}):
374
382
return response .json ()
375
383
376
384
def get_user_group_by_name (self , group_name ):
377
- groups = self .get_user_groups ()
378
- for group in groups ['items' ]:
385
+ group_list = self .get_user_groups ({ "q" : f"name: { group_name } " } )
386
+ for group in group_list ['items' ]:
379
387
if group ['name' ] == group_name :
380
388
return group
381
389
@@ -535,8 +543,8 @@ def find_component_info_for_protex_component(self, protex_component_id, protex_c
535
543
#
536
544
##
537
545
538
- valid_categories = ['VERSION' ,'CODE_LOCATIONS' ,'COMPONENTS' ,'SECURITY' ,'FILES' ]
539
- valid_report_formats = ["CSV" ]
546
+ valid_categories = ['VERSION' ,'CODE_LOCATIONS' ,'COMPONENTS' ,'SECURITY' ,'FILES' , 'ATTACHMENTS' , 'CRYPTO_ALGORITHMS' , 'PROJECT_VERSION_CUSTOM_FIELDS' , 'BOM_COMPONENT_CUSTOM_FIELDS' , 'LICENSE_TERM_FULFILLMENT' ]
547
+ valid_report_formats = ["CSV" , "JSON" ]
540
548
def create_version_reports (self , version , report_list , format = "CSV" ):
541
549
assert all (list (map (lambda k : k in HubInstance .valid_categories , report_list ))), "One or more selected report categories in {} are not valid ({})" .format (
542
550
report_list , HubInstance .valid_categories )
@@ -810,7 +818,7 @@ def get_version_components(self, projectversion, limit=1000):
810
818
paramstring = self .get_limit_paramstring (limit )
811
819
url = projectversion ['_meta' ]['href' ] + "/components" + paramstring
812
820
headers = self .get_headers ()
813
- headers ['Accept' ] = 'application/vnd.blackducksoftware.bill-of-materials-4 +json'
821
+ headers ['Accept' ] = 'application/vnd.blackducksoftware.bill-of-materials-6 +json'
814
822
response = requests .get (url , headers = headers , verify = not self .config ['insecure' ])
815
823
jsondata = response .json ()
816
824
return jsondata
@@ -854,7 +862,7 @@ def update_project_version_settings(self, project_name, version_name, new_settin
854
862
def get_version_by_id (self , project_id , version_id , limit = 100 ):
855
863
headers = self .get_headers ()
856
864
paramstring = self .get_limit_paramstring (limit )
857
- url = self ._get_projects_url () + project_id + "/versions/" + version_id
865
+ url = self ._get_projects_url () + "/" + project_id + "/versions/" + version_id
858
866
headers ['Accept' ] = 'application/vnd.blackducksoftware.project-detail-4+json'
859
867
response = requests .get (url , headers = headers , verify = not self .config ['insecure' ])
860
868
jsondata = response .json ()
@@ -1028,7 +1036,7 @@ def assign_user_group_to_project(self, project_name, user_group_name, project_ro
1028
1036
project_url = project ['_meta' ]['href' ]
1029
1037
assignable_user_groups_link = self .get_link (project , 'assignable-usergroups' )
1030
1038
if assignable_user_groups_link :
1031
- assignable_user_groups_response = self .execute_get (assignable_user_groups_link )
1039
+ assignable_user_groups_response = self .execute_get (f" { assignable_user_groups_link } ?q=name: { user_group_name } " )
1032
1040
assignable_user_groups = assignable_user_groups_response .json ()
1033
1041
1034
1042
# TODO: What to do if the user group is already assigned to the project, and therefore
@@ -1072,6 +1080,20 @@ def assign_user_group_to_project(self, project_name, user_group_name, project_ro
1072
1080
else :
1073
1081
logger .warning ("Did not find a project by the name {}" .format (project_name ))
1074
1082
1083
+ def delete_user_group_from_project (self , project_name , user_group_name ):
1084
+ project = self .get_project_by_name (project_name )
1085
+
1086
+ if project :
1087
+ project_url = project ['_meta' ]['href' ]
1088
+
1089
+ user_group = self .get_user_group_by_name (user_group_name )
1090
+ if user_group :
1091
+ user_group_url = user_group ['_meta' ]['href' ]
1092
+ user_group_id = user_group_url .rsplit ('/' , 1 )[- 1 ]
1093
+
1094
+ project_user_group_url = f"{ project_url } /usergroups/{ user_group_id } "
1095
+ self .execute_delete (project_user_group_url )
1096
+
1075
1097
def assign_user_to_project (self , user_name , project_name , project_roles , limit = 1000 ):
1076
1098
# Assign users to projects
1077
1099
project = self .get_project_by_name (project_name )
0 commit comments