Skip to content

Commit 66b5ef3

Browse files
committed
Revert to old permissions
1 parent e5a73f7 commit 66b5ef3

File tree

4 files changed

+37
-27
lines changed

4 files changed

+37
-27
lines changed

sonar/permissions/permissions.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363

6464
OBJECTS_WITH_PERMISSIONS = (_GLOBAL, _PROJECTS, _TEMPLATES, _QG, _QP, _APPS, _PORTFOLIOS)
6565
PERMISSION_TYPES = ("groups", "users")
66-
NO_PERMISSIONS = []
66+
NO_PERMISSIONS = {p: {} for p in PERMISSION_TYPES}
6767

6868
MAX_PERMS = 100
6969

@@ -85,9 +85,15 @@ def __str__(self) -> str:
8585
def to_json(self, perm_type: Optional[str] = None) -> types.JsonPermissions:
8686
"""Converts a permission object to JSON"""
8787
order = PROJECT_PERMISSIONS if self.concerned_object else ENTERPRISE_GLOBAL_PERMISSIONS
88-
perms += [{"permissions": encode(p["permissions"], order), **p} for p in self.permissions]
89-
if perm_type:
90-
perms = [p for p in perms if perm_type[:-1] in p.keys()]
88+
perms = []
89+
for p in normalize(perm_type):
90+
if p not in self.permissions or len(self.permissions[p]) == 0:
91+
continue
92+
for k, v in self.permissions.get(p, {}).items():
93+
if not v or len(v) == 0:
94+
continue
95+
perms += [{p[:-1]: k, "permissions": encode(v, order)}]
96+
log.info("RETURN PERM = %s", utilities.json_dump(perms))
9197
return perms if len(perms) > 0 else None
9298

9399
def export(self) -> types.ObjectJsonRepr:
@@ -258,7 +264,7 @@ def count(self, perm_type: Optional[str] = None, perm_filter: Optional[list[str]
258264
return perm_counter
259265

260266
def _get_api(self, api: str, perm_type: str, ret_field: str, **extra_params) -> types.JsonPermissions:
261-
perms = []
267+
perms = {}
262268
params = extra_params.copy()
263269
page, nbr_pages = 1, 1
264270
counter = 0
@@ -270,7 +276,7 @@ def _get_api(self, api: str, perm_type: str, ret_field: str, **extra_params) ->
270276
# perms.update({p[ret_field]: p["permissions"] for p in data[perm_type]})
271277
for p in data[perm_type]:
272278
if len(p["permissions"]) > 0:
273-
perms.append({perm_type[:-1]: p[ret_field], "permssions": p["permissions"]})
279+
perms[p[ret_field]] = p["permissions"]
274280
counter = 0
275281
else:
276282
counter += 1
@@ -381,22 +387,23 @@ def diffarray(perms_1: list[str], perms_2: list[str]) -> list[str]:
381387

382388
def white_list(perms: types.JsonPermissions, allowed_perms: list[str]) -> types.JsonPermissions:
383389
"""Returns permissions filtered from a white list of allowed permissions"""
384-
resulting_perms = []
385-
for perm in perms.items():
386-
k = "users" if "users" in perm else "groups"
387-
log.info("PERM = %s", str(perm))
388-
v = [p for p in perm["permissions"] if p in allowed_perms]
389-
resulting_perms.append({k: perm[k], "permissions": v})
390+
resulting_perms = {}
391+
for perm_type, sub_perms in perms.items():
392+
# if perm_type not in PERMISSION_TYPES:
393+
# continue
394+
resulting_perms[perm_type] = {}
395+
for user_or_group, original_perms in sub_perms.items():
396+
resulting_perms[perm_type][user_or_group] = [p for p in original_perms if p in allowed_perms]
390397
return resulting_perms
391398

392399

393400
def black_list(perms: types.JsonPermissions, disallowed_perms: list[str]) -> types.JsonPermissions:
394401
"""Returns permissions filtered after a black list of disallowed permissions"""
395-
resulting_perms = []
396-
for perm in perms:
397-
k = "users" if "users" in perm else "groups"
398-
v = [p for p in perm["permissions"] if p not in disallowed_perms]
399-
resulting_perms.append({k: perm[k], "permissions": v})
402+
resulting_perms = {}
403+
for perm_type, sub_perms in perms.items():
404+
resulting_perms[perm_type] = {}
405+
for user_or_group, original_perms in sub_perms.items():
406+
resulting_perms[perm_type][user_or_group] = [p for p in original_perms if p not in disallowed_perms]
400407
return resulting_perms
401408

402409

sonar/permissions/project_permissions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def read(self) -> ProjectPermissions:
5151
"""Reads permissions in SonarQube"""
5252
self.permissions = permissions.NO_PERMISSIONS.copy()
5353
for p in permissions.PERMISSION_TYPES:
54-
self.permissions += self._get_api(
54+
self.permissions[p] = self._get_api(
5555
ProjectPermissions.APIS["get"][p],
5656
p,
5757
ProjectPermissions.API_GET_FIELD[p],

sonar/permissions/quality_permissions.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,14 @@ def to_json(self, perm_type: Optional[tuple[str, ...]] = None, csv: bool = False
5555
"""Returns the JSON representation of permissions"""
5656
if not self.permissions:
5757
return None
58-
perms = self.permissions.copy()
59-
if perm_type:
60-
perms = [p for p in self.permissions if perm_type[:1] in p]
61-
if csv:
62-
perms = [{"permissions": permissions.encode(p["permissions"], permissions.ENTERPRISE_GLOBAL_PERMISSIONS), **p} for p in perms]
58+
if not csv:
59+
return self.permissions[perm_type] if permissions.is_valid(perm_type) and perm_type in self.permissions else self.permissions
60+
perms = {}
61+
for p in permissions.normalize(perm_type):
62+
dperms = self.permissions.get(p, None)
63+
if dperms is not None and len(dperms) > 0:
64+
perms[p] = permissions.encode(self.permissions.get(p, None))
65+
perms = permissions.dict_to_list(perms)
6366
return perms if len(perms) > 0 else None
6467

6568
def audit(self, audit_settings: types.ConfigSettings) -> list[Problem]:
@@ -109,10 +112,10 @@ def _set_perms(self, new_perms: types.ObjectJsonRepr, apis: dict[str, dict[str,
109112

110113
def _read_perms(self, apis: dict[str, dict[str, str]], field: str, **kwargs) -> types.ObjectJsonRepr:
111114
"""Reads permissions of a QP or QG"""
112-
self.permissions = permissions.NO_PERMISSIONS.copy()
115+
self.permissions = {p: [] for p in permissions.PERMISSION_TYPES}
113116
if self.concerned_object.is_built_in:
114117
log.debug("No permissions for %s because it's built-in", str(self))
115118
else:
116119
for p in permissions.PERMISSION_TYPES:
117-
self.permissions += self._get_api(apis["get"][p], p, field[p], **kwargs)
120+
self.permissions[p] = self._get_api(apis["get"][p], p, field[p], **kwargs)
118121
return self.permissions

sonar/permissions/template_permissions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ class TemplatePermissions(project_permissions.ProjectPermissions):
3939

4040
def read(self) -> TemplatePermissions:
4141
"""Reads permissions of a permission template"""
42-
self.permissions = permissions.NO_PERMISSIONS.copy()
42+
self.permissions = permissions.NO_PERMISSIONS
4343
for p in permissions.PERMISSION_TYPES:
44-
self.permissions += self._get_api(
44+
self.permissions[p] = self._get_api(
4545
TemplatePermissions.API_GET[p],
4646
p,
4747
TemplatePermissions.API_GET_FIELD[p],

0 commit comments

Comments
 (0)