@@ -127,15 +127,15 @@ def users(self) -> types.JsonPermissions:
127127 """
128128 if self .permissions is None :
129129 self .read ()
130- return self .to_json ( perm_type = "users" )
130+ return self .permissions . get ( "users" , {} )
131131
132132 def groups (self ) -> types .JsonPermissions :
133133 """
134134 :return: Group permissions of an object
135135 """
136136 if self .permissions is None :
137137 self .read ()
138- return self .to_json ( perm_type = "groups" )
138+ return self .permissions . get ( "groups" , {} )
139139
140140 def added_permissions (self , other_perms : types .JsonPermissions ) -> types .JsonPermissions :
141141 return diff (self .permissions , other_perms )
@@ -191,7 +191,7 @@ def __audit_max_users_or_groups_with_permissions(self, audit_settings: types.Con
191191 """Audits maximum number of user or groups with permissions"""
192192 problems = []
193193 o = self .concerned_object
194- data = self .to_json ()
194+ data = self .permissions
195195 for t in PERMISSION_TYPES :
196196 max_count = audit_settings .get (f"audit.permissions.max{ t .capitalize ()} " , 5 )
197197 count = len (data .get (t , {}))
@@ -203,7 +203,7 @@ def __audit_max_users_or_groups_with_permissions(self, audit_settings: types.Con
203203 def audit_sonar_users_permissions (self , audit_settings : types .ConfigSettings ) -> list [Problem ]:
204204 """Audits that default user group has no sensitive permissions"""
205205 __SENSITIVE_PERMISSIONS = ["issueadmin" , "scan" , "securityhotspotadmin" , "admin" , "gateadmin" , "profileadmin" ]
206- groups = self .to_json ( perm_type = "groups" )
206+ groups = self .permissions . get ( "groups" , {} )
207207 if isinstance (groups , list ):
208208 groups = {u : ["admin" ] for u in groups }
209209 default_gr = self .endpoint .default_user_group ()
@@ -213,7 +213,7 @@ def audit_sonar_users_permissions(self, audit_settings: types.ConfigSettings) ->
213213
214214 def audit_anyone_permissions (self , audit_settings : types .ConfigSettings ) -> list [Problem ]:
215215 """Audits that Anyone group has no permissions"""
216- groups = self .to_json ( perm_type = "groups" )
216+ groups = self .permissions . get ( "groups" , {} )
217217 if groups and any (gr_name == "Anyone" for gr_name in groups ):
218218 return [Problem (get_rule (RuleId .PROJ_PERM_ANYONE ), self .concerned_object , str (self .concerned_object ))]
219219 return []
@@ -399,13 +399,43 @@ def white_list(perms: types.JsonPermissions, allowed_perms: list[str]) -> types.
399399def black_list (perms : types .JsonPermissions , disallowed_perms : list [str ]) -> types .JsonPermissions :
400400 """Returns permissions filtered after a black list of disallowed permissions"""
401401 resulting_perms = {}
402- for perm_type , sub_perms in perms .items ():
402+ for perm_type , sub_perms in list_to_dict ( perms ) .items ():
403403 resulting_perms [perm_type ] = {}
404404 for user_or_group , original_perms in sub_perms .items ():
405405 resulting_perms [perm_type ][user_or_group ] = [p for p in original_perms if p not in disallowed_perms ]
406- return resulting_perms
406+ return dict_to_list ( resulting_perms )
407407
408408
409409def convert_for_yaml (json_perms : types .ObjectJsonRepr ) -> types .ObjectJsonRepr :
410410 """Converts permissions in a format that is more friendly for YAML"""
411411 return json_perms
412+
413+
414+ def fmt_perms (group_or_user : str , perms : list [str ], type_of_perm : str ) -> types .JsonPermissions :
415+ """Helper to convert perms to dict"""
416+ return {type_of_perm [:- 1 ]: group_or_user , "permissions" : perms }
417+
418+
419+ def group_perms (group : str , perms : list [str ]) -> types .JsonPermissions :
420+ """Helper to convert group perms to dict"""
421+ return fmt_perms (group , perms , "groups" )
422+
423+
424+ def user_perms (user : str , perms : list [str ]) -> types .JsonPermissions :
425+ """Helper to convert group perms to dict"""
426+ return fmt_perms (user , perms , "users" )
427+
428+
429+ def list_to_dict (perms : types .JsonPermissions ) -> dict [str , dict [str , list [str ]]]:
430+ log .info ("L2D = %s" , utilities .json_dump (perms ))
431+ res = {"users" : {p ["user" ]: p ["permissions" ] for p in perms if "user" in p }}
432+ res |= {"groups" : {p ["group" ]: p ["permissions" ] for p in perms if "group" in p }}
433+ return res
434+
435+
436+ def dict_to_list (perms : dict [str , dict [str , list [str ]]]) -> types .JsonPermissions :
437+ res = []
438+ for ptype in PERMISSION_TYPES :
439+ for p in perms .get (ptype , {}):
440+ res += [{ptype [:- 1 ]: k , "permissions" : v } for k , v in p ]
441+ return res
0 commit comments