Skip to content

Commit 7aab834

Browse files
committed
Fixes for new perms format
1 parent bcf508d commit 7aab834

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

sonar/permissions/permissions.py

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
399399
def 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

409409
def 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

Comments
 (0)