diff --git a/cli/audit.py b/cli/audit.py index 11fe14a13..2c34573df 100755 --- a/cli/audit.py +++ b/cli/audit.py @@ -100,8 +100,8 @@ def write_csv(queue: Queue[list[problem.Problem]], fd: TextIO, settings: types.C problems = __filter_problems(problems, settings) for p in problems: json_data = p.to_json(with_url) - data = [] if not server_id else [server_id] - data += [json_data[k] for k in ("problem", "type", "severity", "message") if k in json_data] + data = [server_id] if server_id else [] + data += [json_data[k] for k in ("problem", "type", "severity", "message", "url") if k in json_data] csvwriter.writerow(data) queue.task_done() queue.task_done() @@ -246,7 +246,7 @@ def main() -> None: errcode = errcodes.SIF_AUDIT_ERROR (settings["SERVER_ID"], problems) = _audit_sif(file, settings) problems = __filter_problems(problems, settings) - problem.dump_report(problems, file=ofile, server_id=settings["SERVER_ID"], format=fmt) + problem.dump_report(problems, file=ofile, server_id=settings["SERVER_ID"], fmt=fmt) else: sq = platform.Platform(**kwargs) sq.verify_connection() diff --git a/cli/findings_export.py b/cli/findings_export.py index 6119271cf..952ba8170 100755 --- a/cli/findings_export.py +++ b/cli/findings_export.py @@ -373,6 +373,12 @@ def main() -> None: key_regexp=params.get(options.KEY_REGEXP, None), branch_regexp=branch_regexp, ) + if params[options.COMPONENT_TYPE] == "portfolios": + components = [] + for comp in components_list: + components += comp.components() + components_list = components + if len(components_list) == 0: br = f"and branch matching regexp '{params[options.BRANCH_REGEXP]}'" if options.BRANCH_REGEXP in params else "" raise exceptions.SonarException( diff --git a/cli/housekeeper.py b/cli/housekeeper.py index f5c2b1712..02b7a36b2 100644 --- a/cli/housekeeper.py +++ b/cli/housekeeper.py @@ -32,7 +32,6 @@ from cli import options import sonar.logging as log from sonar import platform, tokens, users, projects, branches, pull_requests, version, errcodes -from sonar.util import types import sonar.util.constants as c import sonar.utilities as util import sonar.exceptions as ex @@ -145,41 +144,58 @@ def _parse_arguments() -> object: return options.parse_and_check(parser=parser, logger_name=TOOL_NAME) -def _delete_objects(problems: problem.Problem, mode: str, settings: types.ConfigSettings) -> tuple[int, int, int, int, int]: - """Deletes objects (that should be housekept)""" +def _revoke_tokens(problems: problem.Problem, mode: str) -> int: + """Revokes user tokens (that should be housekept)""" revoked_token_count = 0 - deleted_projects = {} - deleted_branch_count = 0 - deleted_pr_count = 0 - deleted_loc = 0 - for p in problems: + for p in [p for p in problems if isinstance(p.concerned_object, tokens.UserToken)]: obj = p.concerned_object - if obj is None: - continue # BUG try: - if isinstance(obj, projects.Project): - loc = int(obj.get_measure("ncloc", fallback="0")) - if mode == "delete": - log.info("Deleting %s, %d LoC", str(obj), loc) - else: - log.info("%s, %d LoC should be deleted", str(obj), loc) - if mode != "delete" or obj.delete(): - deleted_projects[obj.key] = obj - deleted_loc += loc - if isinstance(obj, (tokens.UserToken, users.User)) and (mode != "delete" or obj.revoke()): + if mode != "delete" or obj.revoke(): revoked_token_count += 1 - elif settings[PROJ_MAX_AGE] > 0 and obj.project().key in deleted_projects: - log.info("%s deleted, so no need to delete %s", str(obj.project()), str(obj)) - elif mode != "delete" or obj.delete(): - log.info("%s to delete", str(obj)) - if isinstance(obj, branches.Branch): - deleted_branch_count += 1 - elif isinstance(obj, pull_requests.PullRequest): - deleted_pr_count += 1 + except ex.ObjectNotFound: + log.warning("Token %s does not exist, revocation skipped...", obj) + return revoked_token_count + + +def _delete_projects(problems: problem.Problem, mode: str) -> tuple[list[str], int]: + """Deletes projects (that should be housekept)""" + deleted_projects = [] + loc_total = 0 + for obj in [p.concerned_object for p in problems if isinstance(p.concerned_object, projects.Project)]: + try: + loc = int(obj.get_measure("ncloc", fallback="0")) + log.info("Deleting %s, %d LoC" if mode == "delete" else "%s, %d LoC should be deleted", str(obj), loc) + if mode != "delete" or obj.delete(): + deleted_projects.append(obj.key) + loc_total += loc + except ex.ObjectNotFound: + log.warning("%s does not exist, deletion skipped...", str(obj)) + return deleted_projects, loc_total + +def _delete_class(problems: problem.Problem, mode: str, proj_list: list[str], object_class: object) -> int: + """Deletes branches or PRs (that should be housekept)""" + counter = 0 + for obj in [p.concerned_object for p in problems if isinstance(p.concerned_object, object_class)]: + try: + if obj.project().key in proj_list: + log.info("%s deleted, so no need to delete %s", str(obj.project()), str(obj)) + continue + log.info("%s to delete", str(obj)) + if mode != "delete" or obj.delete(): + counter += 1 except ex.ObjectNotFound: log.warning("%s does not exist, deletion skipped...", str(obj)) + return counter + +def _delete_objects(problems: problem.Problem, mode: str) -> tuple[int, int, int, int, int]: + """Deletes objects (that should be housekept)""" + deleted_projects = {} + revoked_token_count = _revoke_tokens(problems, mode) + deleted_projects, deleted_loc = _delete_projects(problems, mode) + deleted_branch_count = _delete_class(problems, mode, deleted_projects, branches.Branch) + deleted_pr_count = _delete_class(problems, mode, deleted_projects, pull_requests.PullRequest) return ( len(deleted_projects), deleted_loc, @@ -224,13 +240,11 @@ def main() -> None: if token_age: problems += get_user_problems(settings, sq) - problem.dump_report(problems, file=kwargs[options.REPORT_FILE], format="csv") + problem.dump_report(problems, file=kwargs[options.REPORT_FILE], fmt="csv") - op = "to delete" - if mode == "delete": - op = "deleted" - (deleted_proj, deleted_loc, deleted_branches, deleted_prs, revoked_tokens) = _delete_objects(problems, mode, settings=settings) + (deleted_proj, deleted_loc, deleted_branches, deleted_prs, revoked_tokens) = _delete_objects(problems, mode) + op = "deleted" if mode == "delete" else "to delete" if proj_age > 0: log.info("%d projects older than %d days (%d LoCs) %s", deleted_proj, proj_age, deleted_loc, op) if branch_age > 0: diff --git a/cli/support.py b/cli/support.py index dc33a621b..ca8b00b7a 100755 --- a/cli/support.py +++ b/cli/support.py @@ -166,7 +166,7 @@ def main(): if problems: found_problems = True log.warning("%d issues found during audit", len(problems)) - problem.dump_report(problems, file=None, format="csv") + problem.dump_report(problems, file=None, fmt="csv") comment += build_jira_comments(problems) else: log.info("%d issues found during audit", len(problems)) diff --git a/pyproject.toml b/pyproject.toml index e55747f9a..839b14d8d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -172,6 +172,9 @@ extend-ignore = [ "I001", "TRY003", "EM102", + "C901", # Complexity rule, better covered by SonarQube + "ANN401", # Disallow Any type annotation + "TD001", # Disallow TODO/FIXME comments ] exclude = [ diff --git a/sonar/app_branches.py b/sonar/app_branches.py index b233bab5f..fd40b1497 100644 --- a/sonar/app_branches.py +++ b/sonar/app_branches.py @@ -21,14 +21,12 @@ """Abstraction of Sonar Application Branch""" from __future__ import annotations -from typing import Optional -from datetime import datetime - +from typing import Optional, TYPE_CHECKING import json from requests.utils import quote import sonar.logging as log -from sonar.util import types, cache +from sonar.util import cache from sonar.components import Component @@ -36,6 +34,9 @@ from sonar import exceptions, projects, utilities import sonar.util.constants as c +if TYPE_CHECKING: + from sonar.util import types + from datetime import datetime _NOT_SUPPORTED = "Applications not supported in community edition" diff --git a/sonar/applications.py b/sonar/applications.py index 795f20168..4aaef0c43 100644 --- a/sonar/applications.py +++ b/sonar/applications.py @@ -260,6 +260,7 @@ def delete(self) -> bool: return super().delete() def get_hotspots(self, filters: Optional[dict[str, str]] = None) -> dict[str, object]: + """Returns the security hotspots of the application (ie of its projects or branches)""" new_filters = filters.copy() if filters else {} pattern = new_filters.pop("branch", None) if new_filters else None if not pattern: @@ -271,6 +272,7 @@ def get_hotspots(self, filters: Optional[dict[str, str]] = None) -> dict[str, ob return findings_list def get_issues(self, filters: Optional[dict[str, str]] = None) -> dict[str, object]: + """Returns the issues of the application (ie of its projects or branches)""" new_filters = filters.copy() if filters else {} pattern = new_filters.pop("branch", None) if new_filters else None if not pattern: diff --git a/sonar/audit/problem.py b/sonar/audit/problem.py index 898510984..588739f90 100644 --- a/sonar/audit/problem.py +++ b/sonar/audit/problem.py @@ -63,7 +63,7 @@ def to_json(self, with_url=False): def dump_report( - problems: list[Problem], file: str, server_id: Optional[str] = None, format: str = "csv", with_url: bool = False, separator: str = "," + problems: list[Problem], file: str, server_id: Optional[str] = None, fmt: str = "csv", with_url: bool = False, separator: str = "," ) -> None: """Dumps to file a report about a list of problems @@ -74,7 +74,7 @@ def dump_report( :rtype: None """ log.info("Writing report to %s", f"file '{file}'" if file else "stdout") - if format == "json": + if fmt == "json": __dump_json(problems=problems, file=file, server_id=server_id, with_url=with_url) else: __dump_csv(problems=problems, file=file, server_id=server_id, with_url=with_url, separator=separator) @@ -91,14 +91,13 @@ def __dump_csv(problems: list[Problem], file: str, server_id: Optional[str] = No with utilities.open_file(file, "w") as fd: csvwriter = csv.writer(fd, delimiter=separator) header = ["Server Id"] if server_id else [] - header += ["Audit Check", "Category", "Severity", "Message"] + header += ["Problem", "Category", "Severity", "Message"] header += ["URL"] if with_url else [] csvwriter.writerow(header) for p in problems: - data = [] - if server_id is not None: - data = [server_id] - data += list(p.to_json(with_url).values()) + json_data = p.to_json(with_url) + data = [server_id] if server_id else [] + data += [json_data[k] for k in ("problem", "type", "severity", "message", "url") if k in json_data] csvwriter.writerow(data) diff --git a/sonar/branches.py b/sonar/branches.py index 9fa714bc4..1bb68c6db 100644 --- a/sonar/branches.py +++ b/sonar/branches.py @@ -22,24 +22,27 @@ from __future__ import annotations from http import HTTPStatus -from typing import Optional -from datetime import datetime +from typing import Optional, TYPE_CHECKING + import json import re from urllib.parse import unquote import requests.utils from sonar import platform -from sonar.util import types, cache +from sonar.util import cache import sonar.logging as log from sonar import components, settings, exceptions, tasks -from sonar import projects +from sonar import projects as proj import sonar.utilities as util from sonar.audit.problem import Problem from sonar.audit.rules import get_rule, RuleId import sonar.util.constants as c +if TYPE_CHECKING: + from sonar.util import types + from datetime import datetime _UNSUPPORTED_IN_CE = "Branches not available in Community Edition" @@ -57,7 +60,7 @@ class Branch(components.Component): "get_new_code": "new_code_periods/list", } - def __init__(self, project: projects.Project, name: str) -> None: + def __init__(self, project: proj.Project, name: str) -> None: """Don't use this, use class methods to create Branch objects :raises UnsupportedOperation: When attempting to branches on Community Edition @@ -76,10 +79,10 @@ def __init__(self, project: projects.Project, name: str) -> None: log.debug("Created object %s", str(self)) @classmethod - def get_object(cls, concerned_object: projects.Project, branch_name: str) -> Branch: + def get_object(cls, concerned_object: proj.Project, branch_name: str) -> Branch: """Gets a SonarQube Branch object - :param projects.Project concerned_object: projects.Project concerned by the branch + :param Project concerned_object: Project concerned by the branch :param str branch_name: The branch name :raises UnsupportedOperation: If trying to manipulate branches on a community edition :raises ObjectNotFound: If project key or branch name not found in SonarQube @@ -97,10 +100,10 @@ def get_object(cls, concerned_object: projects.Project, branch_name: str) -> Bra return cls.load(concerned_object, branch_name, br) @classmethod - def load(cls, concerned_object: projects.Project, branch_name: str, data: types.ApiPayload) -> Branch: + def load(cls, concerned_object: proj.Project, branch_name: str, data: types.ApiPayload) -> Branch: """Gets a Branch object from JSON data gotten from a list API call - :param projects.Project concerned_object: the projects.Project the branch belonsg to + :param Project concerned_object: the Project the branch belonsg to :param str branch_name: Name of the branch :param dict data: Data received from API call :return: The Branch object @@ -122,7 +125,7 @@ def __hash__(self) -> int: """Computes a uuid for the branch that can serve as index""" return hash((self.concerned_object.key, self.name, self.base_url())) - def project(self) -> projects.Project: + def project(self) -> proj.Project: """Returns the project key""" return self.concerned_object @@ -186,7 +189,7 @@ def get( except exceptions.ObjectNotFound as e: if re.match(r"Project .+ not found", e.message): log.warning("Clearing project cache") - projects.Project.CACHE.clear() + proj.Project.CACHE.clear() raise def post(self, api: str, params: types.ApiParams = None, mute: tuple[HTTPStatus] = (), **kwargs: str) -> requests.Response: @@ -196,7 +199,7 @@ def post(self, api: str, params: types.ApiParams = None, mute: tuple[HTTPStatus] except exceptions.ObjectNotFound as e: if re.match(r"Project .+ not found", e.message): log.warning("Clearing project cache") - projects.Project.CACHE.clear() + proj.Project.CACHE.clear() raise def new_code(self) -> str: @@ -396,8 +399,7 @@ def audit(self, audit_settings: types.ConfigSettings) -> list[Problem]: try: if audit_settings.get(c.AUDIT_MODE_PARAM, "") == "housekeeper": return self.__audit_last_analysis(audit_settings) - else: - return self.__audit_last_analysis(audit_settings) + self.__audit_never_analyzed() + self._audit_component(audit_settings) + return self.__audit_last_analysis(audit_settings) + self.__audit_never_analyzed() + self._audit_component(audit_settings) except Exception as e: log.error("%s while auditing %s, audit skipped", util.error_msg(e), str(self)) return [] @@ -414,10 +416,10 @@ def last_task(self) -> Optional[tasks.Task]: return task -def get_list(project: projects.Project) -> dict[str, Branch]: +def get_list(project: proj.Project) -> dict[str, Branch]: """Retrieves the list of branches of a project - :param projects.Project project: projects.Project the branch belongs to + :param Project project: Project the branch belongs to :raises UnsupportedOperation: Branches not supported in Community Edition :return: List of project branches :rtype: dict{branch_name: Branch} @@ -436,13 +438,13 @@ def exists(endpoint: platform.Platform, branch_name: str, project_key: str) -> b :param Platform endpoint: Reference to the SonarQube platform :param str branch_name: Branch name - :param str project_key: projects.Project key + :param str project_key: Project key :raises UnsupportedOperation: Branches not supported in Community Edition :return: Whether the branch exists in SonarQube :rtype: bool """ try: - project = projects.Project.get_object(endpoint, project_key) + project = proj.Project.get_object(endpoint, project_key) except exceptions.ObjectNotFound: return False return branch_name in get_list(project) diff --git a/sonar/findings.py b/sonar/findings.py index 012f6e5ab..8072f237b 100644 --- a/sonar/findings.py +++ b/sonar/findings.py @@ -21,21 +21,24 @@ from __future__ import annotations import concurrent.futures -from datetime import datetime -from typing import Optional +from typing import Optional, TYPE_CHECKING + import re import Levenshtein import sonar.logging as log import sonar.sqobject as sq import sonar.platform as pf -from sonar.util import types from sonar.util import constants as c, issue_defs as idefs from sonar import exceptions import sonar.utilities as util from sonar import projects, rules -from sonar.changelog import Changelog + +if TYPE_CHECKING: + from datetime import datetime + from sonar.util import types + from sonar.changelog import Changelog _JSON_FIELDS_REMAPPED = (("pull_request", "pullRequest"), ("_comments", "comments")) diff --git a/sonar/measures.py b/sonar/measures.py index 108a57b75..2c5a73f74 100644 --- a/sonar/measures.py +++ b/sonar/measures.py @@ -23,7 +23,7 @@ from __future__ import annotations import json -from typing import Any, Optional +from typing import Any, Optional, Union from sonar import metrics, exceptions, platform from sonar.util.types import ApiPayload, ApiParams, KeyList from sonar.util import cache, constants as c @@ -171,7 +171,7 @@ def get_history(concerned_object: object, metrics_list: KeyList, **kwargs) -> li return res_list -def get_rating_letter(rating: Any) -> str: +def get_rating_letter(rating: Union[float, str]) -> str: """ :param any rating: The rating as repturned by the API (a str or float) :return: The rating converted from number to letter, if number between 1 and 5, else the unchanged rating diff --git a/sonar/portfolios.py b/sonar/portfolios.py index e9568cebc..467bdfbd9 100644 --- a/sonar/portfolios.py +++ b/sonar/portfolios.py @@ -26,28 +26,30 @@ from __future__ import annotations import re -from typing import Optional, Union, Any +from typing import Optional, Union, Any, TYPE_CHECKING import json from http import HTTPStatus from threading import Lock import sonar.logging as log import sonar.platform as pf -from sonar.util import types, cache +from sonar.util import cache import sonar.util.constants as c from sonar import aggregations, exceptions, applications, app_branches from sonar.projects import Project -from sonar.branches import Branch import sonar.permissions.permissions as perms import sonar.permissions.portfolio_permissions as pperms import sonar.sqobject as sq import sonar.utilities as util from sonar.audit import rules, problem - from sonar.portfolio_reference import PortfolioReference +if TYPE_CHECKING: + from sonar.util import types + from sonar.branches import Branch + _CLASS_LOCK = Lock() _PORTFOLIO_QUALIFIER = "VW" @@ -538,7 +540,7 @@ def add_application_branch(self, app_key: str, branch: str = c.DEFAULT_BRANCH) - self._applications[app_key].append(branch) return True - def add_subportfolio(self, key: str, name: str = None, by_ref: bool = False) -> Portfolio: + def add_subportfolio(self, key: str, name: Optional[str] = None, by_ref: bool = False) -> Portfolio: """Adds a subportfolio to a portfolio, defined by key, name and by reference option""" log.info("Adding sub-portfolios to %s", str(self)) diff --git a/sonar/settings.py b/sonar/settings.py index ade891e9f..60b341f24 100644 --- a/sonar/settings.py +++ b/sonar/settings.py @@ -440,7 +440,7 @@ def get_all(endpoint: pf.Platform, project: Optional[object] = None) -> dict[str return get_bulk(endpoint, component=project, include_not_set=True) -def new_code_to_string(data: Any) -> Union[int, str, None]: +def new_code_to_string(data: Union[int, str, dict[str, str]]) -> Union[int, str, None]: """Converts a new code period from anything to int str""" if isinstance(data, (int, str)): return data @@ -539,10 +539,9 @@ def encode(setting: Setting, setting_value: Any) -> dict[str, Any]: """Encodes the params to pass to api/settings/set according to setting value type""" if isinstance(setting_value, list): return {"values": setting_value} if isinstance(setting_value[0], str) else {"fieldValues": [json.dumps(v) for v in setting_value]} - elif isinstance(setting_value, bool): + if isinstance(setting_value, bool): return {"value": str(setting_value).lower()} - else: - return {"values" if setting.multi_valued else "value": setting_value} + return {"values" if setting.multi_valued else "value": setting_value} def reset_setting(endpoint: pf.Platform, setting_key: str, project: Optional[object] = None) -> bool: diff --git a/sonar/tasks.py b/sonar/tasks.py index 6ac58fd04..25583f627 100644 --- a/sonar/tasks.py +++ b/sonar/tasks.py @@ -20,7 +20,7 @@ """Abstraction of the SonarQube background task concept""" -from typing import Optional +from typing import Optional, Any from datetime import datetime import time import json @@ -441,7 +441,7 @@ def audit(self, audit_settings: types.ConfigSettings) -> list[Problem]: return problems -def search(endpoint: pf.Platform, only_current: bool = False, component_key: Optional[str] = None, **kwargs) -> list[Task]: +def search(endpoint: pf.Platform, only_current: bool = False, component_key: Optional[str] = None, **kwargs: Any) -> list[Task]: """Searches background tasks :param Platform endpoint: Reference to the SonarQube platform diff --git a/sonar/util/component_helper.py b/sonar/util/component_helper.py index 3172d92d0..6a7dfa058 100644 --- a/sonar/util/component_helper.py +++ b/sonar/util/component_helper.py @@ -21,7 +21,6 @@ import re from typing import Optional -from sonar.util import constants as c from sonar import platform, components, projects, applications, portfolios @@ -33,12 +32,9 @@ def get_components( if component_type in ("apps", "applications"): components = [p for p in applications.get_list(endpoint).values() if re.match(rf"^{key_regexp}$", p.key)] elif component_type == "portfolios": - portfolio_list = [p for p in portfolios.get_list(endpoint).values() if re.match(rf"^{key_regexp}$", p.key)] + components = [p for p in portfolios.get_list(endpoint).values() if re.match(rf"^{key_regexp}$", p.key)] if kwargs.get("topLevelOnly", False): - portfolio_list = [p for p in portfolio_list if p.is_toplevel()] - components = [] - for comp in portfolio_list: - components += comp.components() + components = [p for p in components if p.is_toplevel()] else: components = [p for p in projects.get_list(endpoint).values() if re.match(rf"^{key_regexp}$", p.key)] if component_type != "portfolios" and branch_regexp: diff --git a/sonar/webhooks.py b/sonar/webhooks.py index c004ba00c..2f861228f 100644 --- a/sonar/webhooks.py +++ b/sonar/webhooks.py @@ -21,7 +21,7 @@ """Abstraction of the SonarQube webhook concept""" from __future__ import annotations -from typing import Optional +from typing import Optional, ClassVar import json @@ -41,10 +41,16 @@ class WebHook(sq.SqObject): Abstraction of the SonarQube "webhook" concept """ - CACHE = cache.Cache() - API = {c.CREATE: "webhooks/create", c.READ: "webhooks/list", c.UPDATE: "webhooks/update", c.LIST: "webhooks/list", c.DELETE: "webhooks/delete"} - SEARCH_KEY_FIELD = "key" - SEARCH_RETURN_FIELD = "webhooks" + CACHE: ClassVar[cache.Cache] = cache.Cache() + API: ClassVar[dict[str, str]] = { + c.CREATE: "webhooks/create", + c.READ: "webhooks/list", + c.UPDATE: "webhooks/update", + c.LIST: "webhooks/list", + c.DELETE: "webhooks/delete", + } + SEARCH_KEY_FIELD: ClassVar[str] = "key" + SEARCH_RETURN_FIELD: ClassVar[str] = "webhooks" def __init__(self, endpoint: pf.Platform, name: str, url: str, secret: Optional[str] = None, project: Optional[str] = None) -> None: """Constructor""" diff --git a/test/files/config.json b/test/files/config.json index 44ac5d8c9..bd51fbe2a 100644 --- a/test/files/config.json +++ b/test/files/config.json @@ -1,186 +1,60 @@ { - "applications": { - "APPY": { - "branches": { - "main": { - "isMain": true - } - }, - "name": "App Test 2", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "visibility": "public" - }, - "APP_TEST": { - "branches": { - "BRANCH foo": { - "projects": { - "BANKING-AFRICA-OPS": "main", - "ai-code-fix": "main", - "dvpa": "main" - } - }, - "Other Branch": { - "projects": { - "BANKING-AFRICA-OPS": "main", - "ai-code-fix": "main", - "dvpa": "main" - } - }, - "main": { - "isMain": true, - "projects": { - "BANKING-AFRICA-OPS": "main", - "ai-code-fix": "main", - "dvpa": "main" - } - }, - "some-branch": { - "projects": { - "BANKING-AFRICA-OPS": "main", - "ai-code-fix": "main", - "dvpa": "main" - } - } - }, - "name": "Test App", - "permissions": { - "groups": { - "sonar-administrators": "admin", - "sonar-users": "user" - } - }, - "tags": "africa", - "visibility": "private" - }, - "App_with_no_perms": { - "branches": { - "main": { - "isMain": true - } - }, - "name": "App with no perms", - "permissions": { - "groups": {}, - "users": { - "admin": "admin, user" - } - }, - "visibility": "private" - }, - "FE-BE": { - "branches": { - "main": { - "isMain": true, - "projects": { - "web-backend": "main", - "web-frontend": "main" - } - } - }, - "description": "A web app with a separate front-end and back-end project", - "name": "Front-end / Back-end", - "permissions": { - "groups": { - "developers": "user", - "project-admins": "admin, user", - "security-auditors": "user", - "sonar-administrators": "admin, user", - "tech-leads": "user" - }, - "users": { - "admin": "admin, user" - } + "platform": { + "edition": "enterprise", + "url": "https://latest.olivierk.ngrok.io", + "version": "2025.5.0", + "serverId": "243B8A4D-AY5SFSbmgIK8PCmM81th", + "plugins": { + "ecocodephp": { + "version": "1.4.4", + "name": "ecoCode - PHP language" }, - "visibility": "private" - }, - "MON": { - "branches": { - "main": { - "isMain": true, - "projects": { - "project1": "main", - "project2": "main", - "project3": "main", - "project4": "main", - "proyecto5": "main" - } - } + "checkstyle": { + "version": "10.17.0", + "name": "Checkstyle" }, - "name": "My monorepo", - "permissions": { - "groups": { - "project-admins": "admin", - "sonar-administrators": "admin" - } + "dependencycheck": { + "version": "5.0.0", + "name": "Dependency-Check" }, - "visibility": "public" + "creedengojava": { + "version": "2.1.1", + "name": "creedengo - Java language" + } } }, "globalSettings": { - "analysisScope": { - "sonar.global.exclusions": "**/vendor/**, **/lib/**" - }, - "authentication": { - "sonar.auth.bitbucket.allowUsersToSignUp": true, - "sonar.auth.bitbucket.enabled": false, - "sonar.auth.github.allowUsersToSignUp": true, - "sonar.auth.github.apiUrl": "https://api.github.com/", - "sonar.auth.github.appId": 946173, - "sonar.auth.github.enabled": true, - "sonar.auth.github.groupsSync": false, - "sonar.auth.github.organizations": "okorach-org", - "sonar.auth.github.webUrl": "https://github.com/", - "sonar.auth.gitlab.allowUsersToSignUp": true, - "sonar.auth.gitlab.allowedGroups": "gl-admins", - "sonar.auth.gitlab.enabled": true, - "sonar.auth.gitlab.groupsSync": true, - "sonar.auth.gitlab.url": "https://gitlab.com/", - "sonar.auth.saml.applicationId": "sonarqube", - "sonar.auth.saml.enabled": false, - "sonar.auth.saml.providerName": "SAML", - "sonar.auth.saml.signature.enabled": false, - "sonar.auth.token.max.allowed.lifetime": "1 year", - "sonar.forceAuthentication": true - }, - "devopsIntegration": { - "ADO": { - "type": "azure", - "url": "https://dev.azure.com/olivierkorach" - }, - "GitHub okorach": { - "appId": "946159", - "clientId": "Iv23ligl0iLhGRRvwFGO", - "type": "github", - "url": "https://api.github.com" - }, - "GitHub okorach-org": { - "appId": "946173", - "clientId": "Iv23limDid9ft2WPgTPK", - "type": "github", - "url": "https://api.github.com" - }, - "gitlab.com": { - "type": "gitlab", - "url": "https://gitlab.com/api/v4" - } - }, "generalSettings": { - "provisioning.github.project.visibility.enabled": true, - "provisioning.gitlab.enabled": false, - "sonar.ai.suggestions.enabled": "ENABLED_FOR_ALL_PROJECTS", - "sonar.allowPermissionManagementForProjectAdmins": false, - "sonar.announcement.displayMessage": false, - "sonar.announcement.message": "You are on LATEST", - "sonar.autodetect.ai.code": true, - "sonar.builtInQualityProfiles.disableNotificationOnUpdate": false, - "sonar.ce.parallelProjectTasks": false, + "sonar.sca.featureEnabled": "true", + "sonar.sca.enabled": "true", + "sonar.sca.rescan.frequency": "Daily", + "sonar.sca.rescan.branch_type": "Kept branches only", + "sonar.autodetect.ai.code": "true", + "sonar.architecture.config.model": "Model is not configured.", + "provisioning.gitlab.enabled": "false", + "provisioning.github.project.visibility.enabled": "true", + "sonar.login.message": "Welcome to [superbank.com](https://www.superbank.com) SonarQube.\nPlease log in using your GitHub account", + "sonar.login.displayMessage": "true", + "sonar.plugins.downloadOnlyRequired": "true", + "sonar.announcement.message": "You are on LATEST, You are on LATEST", + "sonar.builtInQualityProfiles.disableNotificationOnUpdate": "false", + "sonar.cpd.cross_project": "false", + "sonar.projectCreation.mainBranchName": "main", + "sonar.developerAggregatedInfo.disabled": "false", + "sonar.jreAutoProvisioning.disabled": "false", + "sonar.announcement.displayMessage": "false", + "sonar.qualityProfiles.allowDisableInheritedRules": "false", + "sonar.ce.parallelProjectTasks": "false", + "sonar.lf.enableGravatar": "false", + "sonar.lf.gravatarServerUrl": "https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon", + "sonar.qualitygate.ignoreSmallChanges": "true", "sonar.core.serverBaseURL": "https://latest.olivierk.ngrok.io", - "sonar.cpd.cross_project": false, - "sonar.dbcleaner.auditHousekeeping": "Monthly", + "sonar.githubactions.activate": "true", + "sonar.pdf.confidential.header.enabled": "true", + "sonar.governance.report.project.branch.frequency": "Monthly", + "sonar.governance.report.view.frequency": "Monthly", + "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay": "24", + "sonar.dbcleaner.daysBeforeDeletingInactiveBranchesAndPRs": "30", "sonar.dbcleaner.branchesToKeepWhenInactive": [ "comma,branch", "develop", @@ -189,79 +63,94 @@ "release-.*", "trunk" ], - "sonar.dbcleaner.daysBeforeDeletingAnticipatedTransitions": 30, - "sonar.dbcleaner.daysBeforeDeletingClosedIssues": 30, - "sonar.dbcleaner.daysBeforeDeletingInactiveBranchesAndPRs": 30, - "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay": 24, - "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots": 260, - "sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion": 104, - "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth": 52, - "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek": 4, - "sonar.developerAggregatedInfo.disabled": false, - "sonar.governance.report.project.branch.frequency": "Monthly", - "sonar.governance.report.view.frequency": "Monthly", - "sonar.kubernetes.activate": true, - "sonar.kubernetes.helm.activate": true, - "sonar.lf.enableGravatar": false, - "sonar.lf.gravatarServerUrl": "https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon", - "sonar.login.displayMessage": true, - "sonar.login.message": "Welcome to superbank.com SonarQube.
Please log in using your GitHub account, Welcome to [superbank.com](https://www.spuerbank.com) SonarQube.\nPlease log in using your GitHub account", - "sonar.multi-quality-mode.enabled": true, - "sonar.pdf.confidential.header.enabled": true, - "sonar.plugins.downloadOnlyRequired": true, - "sonar.projectCreation.mainBranchName": "main", - "sonar.qualityProfiles.allowDisableInheritedRules": false, - "sonar.qualitygate.ignoreSmallChanges": true, - "sonar.scanner.skipNodeProvisioning": false, - "sonar.scm.disabled": false, - "sonar.technicalDebt.developmentCost": 30, + "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek": "4", + "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth": "52", + "sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion": "104", + "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots": "260", + "sonar.dbcleaner.daysBeforeDeletingClosedIssues": "30", + "sonar.dbcleaner.daysBeforeDeletingAnticipatedTransitions": "30", + "sonar.dbcleaner.auditHousekeeping": "Monthly", + "sonar.scanner.skipNodeProvisioning": "false", + "sonar.kubernetes.activate": "true", + "sonar.kubernetes.helm.activate": "true", + "sonar.scm.disabled": "false", + "sonar.validateWebhooks": "true", + "sonar.allowPermissionManagementForProjectAdmins": "false", + "sonar.enforceAzureOpenAiDomainValidation": "true", + "sonar.technicalDebt.developmentCost": "30", "sonar.technicalDebt.ratingGrid": "0.03,0.07,0.2,0.5", - "sonar.validateWebhooks": true, + "sonar.multi-quality-mode.enabled": true, + "sonar.ai.suggestions.enabled": "ENABLED_FOR_ALL_PROJECTS", "webhooks": { "Jenkins": { - "url": "https://jenkins.olivierk.ngrok.io" + "url": "https://my.jenkins.server/sonar-webhook/" } } }, + "analysisScope": { + "sonar.global.exclusions": "**/vendor/**, **/lib/**" + }, + "authentication": { + "sonar.auth.saml.enabled": "false", + "sonar.auth.github.enabled": "true", + "sonar.auth.gitlab.enabled": "true", + "sonar.auth.bitbucket.enabled": "false", + "sonar.auth.saml.applicationId": "sonarqube", + "sonar.auth.gitlab.url": "https://gitlab.com/", + "sonar.auth.saml.providerName": "SAML", + "sonar.auth.bitbucket.allowUsersToSignUp": "true", + "sonar.auth.github.appId": "946173", + "sonar.auth.gitlab.allowUsersToSignUp": "true", + "sonar.auth.github.allowUsersToSignUp": "true", + "sonar.auth.gitlab.allowedGroups": "gl-admins", + "sonar.auth.github.groupsSync": "false", + "sonar.auth.gitlab.groupsSync": "true", + "sonar.auth.github.apiUrl": "https://api.github.com/", + "sonar.auth.github.webUrl": "https://github.com/", + "sonar.auth.github.organizations": "okorach-org", + "sonar.auth.saml.signature.enabled": "false", + "sonar.auth.token.max.allowed.lifetime": "1 year", + "sonar.forceAuthentication": "true" + }, "languages": { "abap": { "sonar.abap.file.suffixes": ".ab4, .abap, .asprog, .flow" }, "ansible": { - "sonar.ansible.activate": true + "sonar.ansible.activate": "true" }, "apex": { "sonar.apex.file.suffixes": ".cls, .trigger" }, "azureresourcemanager": { - "sonar.azureresourcemanager.activate": true, - "sonar.azureresourcemanager.file.identifier": "https://schema.management.azure.com/schemas/", - "sonar.azureresourcemanager.file.suffixes": ".bicep" + "sonar.azureresourcemanager.activate": "true", + "sonar.azureresourcemanager.file.suffixes": ".bicep", + "sonar.azureresourcemanager.file.identifier": "https://schema.management.azure.com/schemas/" }, "cfamily": { "sonar.c.file.suffixes": ".c, .h", "sonar.cpp.file.suffixes": ".c++, .cc, .cpp, .cxx, .h++, .hh, .hpp, .hxx, .ipp", "sonar.objc.file.suffixes": ".m" }, + "cs": { + "sonar.cs.analyzeGeneratedCode": "false", + "sonar.cs.analyzeRazorCode": "true", + "sonar.cs.file.suffixes": ".cs", + "sonar.cs.ignoreHeaderComments": "true", + "sonar.cs.roslyn.ignoreIssues": "false" + }, "cloudformation": { - "sonar.cloudformation.activate": true, + "sonar.cloudformation.activate": "true", "sonar.cloudformation.file.identifier": "AWSTemplateFormatVersion" }, "cobol": { - "sonar.cobol.adaprep.activation": false, - "sonar.cobol.byteBasedColumnCount": false, + "sonar.cobol.adaprep.activation": "false", + "sonar.cobol.byteBasedColumnCount": "false", "sonar.cobol.dialect": "ibm-enterprise-cobol", - "sonar.cobol.exec.recoveryMode": true, + "sonar.cobol.exec.recoveryMode": "true", + "sonar.cpd.cobol.ignoreLiteral": "true", "sonar.cobol.sourceFormat": "fixed", - "sonar.cobol.tab.width": 8, - "sonar.cpd.cobol.ignoreLiteral": true - }, - "cs": { - "sonar.cs.analyzeGeneratedCode": false, - "sonar.cs.analyzeRazorCode": true, - "sonar.cs.file.suffixes": ".cs", - "sonar.cs.ignoreHeaderComments": true, - "sonar.cs.roslyn.ignoreIssues": false + "sonar.cobol.tab.width": "8" }, "css": { "sonar.css.file.suffixes": ".css, .less, .scss" @@ -270,136 +159,179 @@ "sonar.dart.file.suffixes": ".dart" }, "docker": { - "sonar.docker.activate": true, + "sonar.docker.activate": "true", "sonar.docker.file.patterns": "*.dockerfile, Dockerfile, *.Dockerfile" }, - "flex": { - "sonar.flex.file.suffixes": "as" + "vbnet": { + "sonar.vbnet.roslyn.ignoreIssues": "false", + "sonar.vbnet.analyzeGeneratedCode": "false", + "sonar.vbnet.file.suffixes": ".vb", + "sonar.vbnet.ignoreHeaderComments": "true" }, - "go": { - "sonar.go.exclusions": "**/vendor/**", - "sonar.go.file.suffixes": ".go" + "terraform": { + "sonar.terraform.activate": "true", + "sonar.terraform.file.suffixes": ".tf" }, - "html": { - "sonar.html.file.suffixes": ".ascx, .aspx, .cmp, .cshtml, .erb, .html, .rhtml, .shtm, .shtml, .twig, .vbhtml, .xhtml" + "kotlin": { + "sonar.kotlin.file.suffixes": ".kt" }, - "ipynb": { - "sonar.ipynb.file.suffixes": "ipynb" + "python": { + "sonar.python.file.suffixes": "py", + "sonar.python.coverage.reportPaths": "coverage-reports/*coverage-*.xml", + "sonar.python.xunit.skipDetails": "false", + "sonar.python.xunit.reportPath": "build//xunit-results*.xml" }, "java": { "sonar.java.checkstyle.reportPaths": "target/checkstyle-result.xml, target/sonar/checkstyle-result.xml", - "sonar.java.enablePreview": false, - "sonar.java.file.suffixes": ".jav, .java", - "sonar.java.ignoreUnnamedModuleForSplitPackage": false, - "sonar.java.jvmframeworkconfig.activate": true, - "sonar.java.jvmframeworkconfig.file.patterns": "**/src/main/resources/**/application*.properties, **/src/main/resources/**/application*.yaml, **/src/main/resources/**/application*.yml" + "sonar.java.jvmframeworkconfig.activate": "true", + "sonar.java.enablePreview": "false", + "sonar.java.jvmframeworkconfig.file.patterns": "**/src/main/resources/**/application*.properties, **/src/main/resources/**/application*.yaml, **/src/main/resources/**/application*.yml", + "sonar.java.file.suffixes": ".java, .jav", + "sonar.java.ignoreUnnamedModuleForSplitPackage": "false" }, "javascript": { + "sonar.javascript.globals": "Backbone, OenLayers, _, angular, casper, d3, dijit, dojo, dojox, goog, google, moment, sap", + "sonar.javascript.ignoreHeaderComments": "true", "sonar.javascript.environments": "amd, applescript, atomtest, browser, commonjs, couch, embertest, flow, greasemonkey, jasmine, jest, jquery, meteor, mocha, mongo, nashorn, node, phantomjs, prototypejs, protractor, qunit, rhino, serviceworker, shared-node-browser, shelljs, webextensions, worker, wsh, yui", "sonar.javascript.file.suffixes": ".cjs, .js, .jsx, .mjs, .vue", - "sonar.javascript.globals": "Backbone, OenLayers, _, angular, casper, d3, dijit, dojo, dojox, goog, google, moment, sap", - "sonar.javascript.ignoreHeaderComments": true, - "sonar.javascript.maxFileSize": 1000 + "sonar.javascript.maxFileSize": "1000", + "sonar.jasmin.internal.disabled": "false" }, - "jcl": { - "sonar.jcl.file.suffixes": ".jcl" + "php": { + "sonar.php.file.suffixes": "inc, php, php3, php4, php5, phtml", + "sonar.php.exclusions": "**/vendor/**", + "sonar.php.frameworkDetection": "true" }, - "json": { - "sonar.json.activate": false, - "sonar.json.file.suffixes": ".json" + "ruby": { + "sonar.ruby.file.suffixes": ".rb", + "sonar.ruby.coverage.reportPaths": "coverage/.resultset.json", + "sonar.ruby.exclusions": "**/vendor/**" + }, + "scala": { + "sonar.scala.file.suffixes": ".scala" + }, + "swift": { + "sonar.swift.file.suffixes": ".swift" + }, + "typescript": { + "sonar.typescript.file.suffixes": ".cts, .mts, .ts, .tsx" + }, + "flex": { + "sonar.flex.file.suffixes": "as" + }, + "go": { + "sonar.go.file.suffixes": ".go", + "sonar.go.exclusions": "**/vendor/**" + }, + "html": { + "sonar.html.file.suffixes": ".ascx, .aspx, .cmp, .cshtml, .erb, .html, .rhtml, .shtm, .shtml, .twig, .vbhtml, .xhtml" }, "jsp": { "sonar.jsp.file.suffixes": ".jsp, .jspf, .jspx" }, - "kotlin": { - "sonar.kotlin.file.suffixes": ".kt" + "jcl": { + "sonar.jcl.file.suffixes": ".jcl" }, - "php": { - "sonar.php.exclusions": "**/vendor/**", - "sonar.php.file.suffixes": "inc, php, php3, php4, php5, phtml", - "sonar.php.frameworkDetection": true + "json": { + "sonar.json.activate": "false", + "sonar.json.file.suffixes": ".json" }, "pli": { "sonar.pli.extralingualCharacters": "#@$", "sonar.pli.file.suffixes": ".pli", - "sonar.pli.ignoreHeaderComments": true, - "sonar.pli.marginLeft": 2, - "sonar.pli.marginRight": 72 + "sonar.pli.ignoreHeaderComments": "true", + "sonar.pli.marginLeft": "2", + "sonar.pli.marginRight": "72" }, "plsql": { "sonar.plsql.file.suffixes": "pkb, pks, sql", - "sonar.plsql.ignoreHeaderComments": false + "sonar.plsql.ignoreHeaderComments": "false" }, - "python": { - "sonar.python.coverage.reportPaths": "coverage-reports/*coverage-*.xml", - "sonar.python.file.suffixes": "py", - "sonar.python.xunit.reportPath": "build//xunit-results*.xml", - "sonar.python.xunit.skipDetails": false + "ipynb": { + "sonar.ipynb.file.suffixes": "ipynb" }, "rpg": { "sonar.rpg.file.suffixes": ".RPG, .RPGLE, .SQLRPGLE, .rpg, .rpgle, .sqlrpgle", - "sonar.rpg.leftMarginWidth": 12 - }, - "ruby": { - "sonar.ruby.coverage.reportPaths": "coverage/.resultset.json", - "sonar.ruby.exclusions": "**/vendor/**", - "sonar.ruby.file.suffixes": ".rb" - }, - "scala": { - "sonar.scala.file.suffixes": ".scala" - }, - "swift": { - "sonar.swift.file.suffixes": ".swift" + "sonar.rpg.leftMarginWidth": "12" }, - "terraform": { - "sonar.terraform.activate": true, - "sonar.terraform.file.suffixes": ".tf" + "rust": { + "sonar.rust.clippy.enabled": "true", + "sonar.rust.clippy.offline": "false", + "sonar.rust.file.suffixes": ".rs" }, "text": { - "sonar.text.activate": true, - "sonar.text.inclusions": "**/*.sh, **/*.bash, **/*.zsh, **/*.ksh, **/*.ps1, **/*.properties, **/*.conf, **/*.pem, **/*.config, .env, .aws/config", - "sonar.text.inclusions.activate": true + "sonar.text.activate": "true", + "sonar.text.inclusions.activate": "true", + "sonar.text.inclusions": "**/*.sh, **/*.bash, **/*.zsh, **/*.ksh, **/*.ps1, **/*.properties, **/*.conf, **/*.pem, **/*.config, .env, .aws/config" }, "tsql": { "sonar.tsql.file.suffixes": ".tsql" }, - "typescript": { - "sonar.typescript.file.suffixes": ".cts, .mts, .ts, .tsx" - }, "vb": { "sonar.vb.file.suffixes": ".BAS, .CLS, .CTL, .FRM, .bas, .cls, .ctl, .frm", - "sonar.vb.ignoreHeaderComments": true - }, - "vbnet": { - "sonar.vbnet.analyzeGeneratedCode": false, - "sonar.vbnet.file.suffixes": ".vb", - "sonar.vbnet.ignoreHeaderComments": true, - "sonar.vbnet.roslyn.ignoreIssues": false + "sonar.vb.ignoreHeaderComments": "true" }, "xml": { "sonar.xml.file.suffixes": ".xml, .xsd, .xsl" }, "yaml": { - "sonar.yaml.activate": false, + "sonar.yaml.activate": "false", "sonar.yaml.file.suffixes": ".yaml, .yml" } }, - "linters": { - "sonar.checkstyle.filters": "", - "sonar.checkstyle.treewalkerfilters": "" + "tests": { + "sonar.coverage.jacoco.xmlReportPaths": "**/jacoco*.xml", + "sonar.junit.reportPaths": "**/junit*.xml" }, - "permissionTemplates": { - "0. Default Template for portfolio": { - "defaultFor": "portfolios", - "description": "Default portfolio permissions", - "permissions": { - "groups": { - "sonar-users": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user" - } - } + "devopsIntegration": { + "GitHub okorach": { + "type": "github", + "url": "https://api.github.com", + "appId": "946159", + "clientId": "Iv23ligl0iLhGRRvwFGO" + }, + "GitHub okorach-org": { + "type": "github", + "url": "https://api.github.com", + "appId": "946173", + "clientId": "Iv23limDid9ft2WPgTPK" }, + "ADO": { + "type": "azure", + "url": "https://dev.azure.com/olivierkorach" + }, + "gitlab.com": { + "type": "gitlab", + "url": "https://gitlab.com/api/v4" + } + }, + "sastConfig": {}, + "linters": { + "sonar.checkstyle.filters": "", + "sonar.checkstyle.treewalkerfilters": "" + }, + "thirdParty": { + "sonar.dependencyCheck.severity.high": "7.0", + "sonar.dependencyCheck.severity.medium": "4.0", + "sonar.dependencyCheck.severity.low": "0.0", + "sonar.dependencyCheck.htmlReportPath": "${WORKSPACE}/dependency-check-report.html", + "sonar.dependencyCheck.jsonReportPath": "${WORKSPACE}/dependency-check-report.json", + "sonar.dependencyCheck.securityHotspot": "false", + "sonar.dependencyCheck.skip": "false", + "sonar.dependencyCheck.summarize": "false", + "sonar.dependencyCheck.useFilePath": "false" + }, + "permissions": { + "groups": { + "ci-tools": "provisioning, scan", + "language-experts": "profileadmin", + "quality-managers": "gateadmin", + "sonar-administrators": "admin, applicationcreator, gateadmin, portfoliocreator, profileadmin, provisioning, scan", + "sonar-users": "applicationcreator, portfoliocreator" + } + }, + "permissionTemplates": { "0. Default template": { - "defaultFor": "projects, applications", "description": "This permission template will be used as default when no other permission configuration is available", "permissions": { "groups": { @@ -410,25 +342,34 @@ "sonar-users": "user", "tech-leads": "codeviewer, issueadmin, user" } - } + }, + "defaultFor": "projects, applications" + }, + "0. Default Template for portfolio": { + "description": "Default portfolio permissions", + "permissions": { + "groups": { + "sonar-users": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user" + } + }, + "defaultFor": "portfolios" }, "1. Banking projects": { "description": "Template for banking BU projects", - "pattern": "BANKING-.*", "permissions": { + "users": { + "olivier-k31581": "admin, user" + }, "groups": { "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", "sonar-users": "codeviewer, user" - }, - "users": { - "olivier-k31581": "admin, user" } - } + }, + "pattern": "BANKING-.*" }, "9. Bad Template - Bad pattern": { "description": "A wrong template whose projectKeyPattern would select a single project... at best. This is probably not the intended behavior. Templates make sense only if used for multiple projects", - "pattern": "my_favorite_project", "permissions": { "groups": { "ci-tools": "scan", @@ -437,3849 +378,4399 @@ "security-auditors": "issueadmin, securityhotspotadmin", "tech-leads": "codeviewer, issueadmin, securityhotspotadmin, user" } - } + }, + "pattern": "my_favorite_project" }, - "9. Bad template - Permission templates granted to users": { - "description": "A bad perm template with perms granted directly to user", - "pattern": "badbadbad.*", - "permissions": { - "users": { - "james": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "michal": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user" - } - } + "9. Bad template - no permissions": { + "description": "A template with no permissions granted. This makes little sense", + "pattern": "FOOBAR.*" }, "9. Bad template - Permissions granted to Anyone": { "description": "A permission template that grants permissions to Anyone (ie unauthenticated users), this is a bad practice", - "pattern": "BAD9.*", "permissions": { "groups": { "Anyone": "user", "ci-tools": "scan", "developers": "codeviewer, user" } - } + }, + "pattern": "BAD9.*" }, - "9. Bad template - no permissions": { - "description": "A template with no permissions granted. This makes little sense", - "pattern": "FOOBAR.*" - } - }, - "permissions": { - "groups": { - "ci-tools": "provisioning, scan", - "language-experts": "profileadmin", - "quality-managers": "gateadmin", - "sonar-administrators": "admin, applicationcreator, gateadmin, portfoliocreator, profileadmin, provisioning, scan", - "sonar-users": "applicationcreator, portfoliocreator" + "9. Bad template - Permission templates granted to users": { + "description": "A bad perm template with perms granted directly to user", + "permissions": { + "users": { + "james": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "michal": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user" + } + }, + "pattern": "badbadbad.*" } - }, - "sastConfig": {}, - "tests": {}, - "thirdParty": { - "sonar.dependencyCheck.htmlReportPath": "${WORKSPACE}/dependency-check-report.html", - "sonar.dependencyCheck.jsonReportPath": "${WORKSPACE}/dependency-check-report.json", - "sonar.dependencyCheck.securityHotspot": false, - "sonar.dependencyCheck.severity.high": 7.0, - "sonar.dependencyCheck.severity.low": 0.0, - "sonar.dependencyCheck.severity.medium": 4.0, - "sonar.dependencyCheck.skip": false, - "sonar.dependencyCheck.summarize": false, - "sonar.dependencyCheck.useFilePath": false, - "sonar.enforceAzureOpenAiDomainValidation": true, - "sonar.jasmin.enabled": false, - "sonar.rust.clippy.enabled": true, - "sonar.rust.file.suffixes": ".rs", - "sonar.sca.enabled": true, - "sonar.sca.rescan.branch_type": "Kept branches only", - "sonar.sca.rescan.frequency": "Daily" } }, - "groups": { - "ci-tools": "Service accounts for CI tools", - "developers": "Developers", - "gl-admins": "", - "gl-admins/gl-devs": "", - "language-experts": "Language experts in charge of defining the company governance in terms of Quality Profiles (rulesets enforced in the company)", - "project-admins": "Project administrators in charge of project configuration", - "quality-managers": "Quality Managers in charge of defining company governance in terms of quality gates", - "security-auditors": "Security Auditors in charge of reviewing security issues", - "sonar-administrators": "SonarQube administrators", - "tech-leads": "Senior developers in charge of reviewing issues", - "z comma , group": "" - }, - "platform": { - "edition": "enterprise", - "plugins": { - "checkstyle": "10.17.0 [Checkstyle]", - "creedengojava": "2.1.1 [creedengo - Java language]", - "dependencycheck": "5.0.0 [Dependency-Check]", - "ecocodephp": "1.4.4 [ecoCode - PHP language]" + "qualityGates": { + "My Sonar way": { + "conditions": [ + "new_duplicated_lines_density >= 3%", + "new_security_hotspots_reviewed <= 100%", + "new_violations >= 0" + ] }, - "serverId": "243B8A4D-AY5SFSbmgIK8PCmM81th", - "url": "https://latest.olivierk.ngrok.io", - "version": "2025.4.2" + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + }, + "Sonar way + SCA": { + "conditions": [ + "new_coverage <= 80%", + "new_duplicated_lines_density >= 3%", + "new_security_hotspots_reviewed <= 100%", + "new_violations >= 0", + "sca_count_any_issue >= 7", + "sca_rating_any_issue >= B", + "sca_rating_licensing >= C", + "sca_rating_vulnerability >= C", + "sca_severity_any_issue >= High", + "sca_severity_licensing >= High", + "sca_severity_vulnerability >= 24", + "vulnerable_dependencies >= 0" + ] + }, + "Sonar way for AI Code": { + "isBuiltIn": true + }, + "\ud83e\udd47 1 - Corp Gold": { + "conditions": [ + "new_coverage <= 85%", + "new_duplicated_lines_density >= 2%", + "new_security_hotspots_reviewed <= 100%", + "new_violations >= 0", + "prioritized_rule_issues >= 0", + "sca_severity_any_issue >= High", + "software_quality_blocker_issues >= 0", + "software_quality_reliability_rating >= D", + "software_quality_security_rating >= C" + ] + }, + "\ud83e\udd48 2 - Corp Silver": { + "conditions": [ + "new_coverage <= 50%", + "new_duplicated_lines_density >= 3%", + "new_security_hotspots_reviewed <= 100%", + "new_violations >= 0", + "prioritized_rule_issues >= 0", + "software_quality_security_rating >= C" + ] + }, + "\ud83e\udd49 3 - Corp base": { + "conditions": [ + "new_duplicated_lines_density >= 3%", + "new_software_quality_maintainability_rating >= A", + "new_software_quality_reliability_issues >= 0", + "new_software_quality_security_issues >= 0" + ] + } }, - "portfolios": { - "All": { - "name": "Company global portfolio", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "portfolios": { - "Banking": { - "byReference": true - }, - "CORP-INSURANCE": { - "byReference": true - }, - "Other_unclassified_projects": { - "name": "Other unclassified projects", - "projects": { - "branch": "-DEFAULT_BRANCH-", - "rest": true - } - } - }, - "visibility": "public" + "qualityProfiles": { + "abap": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "Banking": { - "name": "Banking", - "permissions": { - "groups": { - "sonar-administrators": "admin, user", - "sonar-users": "user" - } - }, - "portfolios": { - "Investment_Banking": { - "name": "Investment Banking", - "portfolios": { - "Corporate_Mergers_and_Acquisitions": { - "name": "Corporate Mergers and Acquisitions", - "projects": { - "branch": "-DEFAULT_BRANCH-", - "regexp": ".*MERgER.*" - } - }, - "Corporate_loans": { - "name": "Corporate loans", - "projects": {} - } - }, - "projects": { - "branch": "develop", - "regexp": ".*-INVESTMENT-.*" - } - }, - "Private_Banking": { - "byReference": true - }, - "Retail_Banking": { - "name": "Retail Banking", - "projects": { - "branch": "-DEFAULT_BRANCH-", - "regexp": ".*-RETAIL-.*" - } + "ansible": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "Test": {} } - }, - "projects": {}, - "visibility": "private" + } }, - "CEO_Strategic_Projects": { - "name": "CEO Strategic Projects", - "permissions": { - "groups": { - "sonar-administrators": "admin", - "sonar-users": "user" - } - }, - "projects": {}, - "visibility": "private" + "apex": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "CORP-INSURANCE": { - "name": "Insurance", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "portfolios": { - "CORP-INSURANCE-HEALTH": { - "byReference": true - }, - "CORP-INSURANCE-LIFE": { - "byReference": true - }, - "Other_Insurance": { - "name": "Other Insurance", - "projects": {} - } - }, - "visibility": "public" + "azureresourcemanager": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "CORP-INSURANCE-HEALTH": { - "name": "Health Insurance", - "permissions": { - "groups": { - "sonar-administrators": "admin, user", - "sonar-users": "user", - "z comma , group": "user" - }, - "users": { - "michal": "user", - "olivier": "admin", - "syncer": "user" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "regexp": ".*HEALTH.*" - }, - "visibility": "private" + "c": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "CORP-INSURANCE-LIFE": { - "name": "Life Insurance", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "projects": { - "manual": { - "INSURANCE-LIFE": "-DEFAULT_BRANCH-", - "INSURANCE-PET": "-DEFAULT_BRANCH-" - } - }, - "visibility": "public" + "cloudformation": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "DEMOS": { - "description": "Demo projects gathered by tag", - "name": "Demo projects", - "permissions": { - "groups": { - "sonar-users": "admin" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "tags": "demo" - }, - "visibility": "public" + "cobol": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "PORTFOLIO-OLIVIER": { - "description": "Portfolios of all Olivier's projects", - "name": "Olivier's projects", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "regexp": ".*okorach.*" + "cpp": { + "Mission critical": { + "isBuiltIn": true }, - "visibility": "public" + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "PORTFOLIO-PYTHON": { - "name": "Python Projects", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "tags": "python" - }, - "visibility": "public" + "cs": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "PORTFOLIO_ALL": { - "name": "All projects", - "permissions": { - "groups": { - "sonar-administrators": "admin, user", - "sonar-users": "user" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "rest": true - }, - "visibility": "private" + "css": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "PORTFOLIO_APPS": { - "applications": { - "APPY": "-DEFAULT_BRANCH-", - "APP_TEST": "-DEFAULT_BRANCH-, Other Branch" - }, - "name": "Portfolio of Apps", - "permissions": { - "groups": { - "sonar-administrators": "admin", - "sonar-users": "user" + "dart": { + "Sonar way": { + "isBuiltIn": true, + "children": { + "Corp Way": { + "isDefault": true, + "children": { + "Critical projects": { + "addedRules": [ + { + "key": "dart:S106" + }, + { + "key": "dart:S1541", + "params": { + "threshold": "10" + } + }, + { + "key": "dart:S7084" + }, + { + "key": "dart:S113" + }, + { + "key": "dart:S115" + }, + { + "key": "dart:S7103", + "severities": { + "MAINTAINABILITY": "HIGH" + } + }, + { + "key": "dart:S1854" + } + ] + } + } + } } - }, - "visibility": "private" + } }, - "PORTFOLIO_MULTI_BRANCHES": { - "name": "Portfolios multiple branches", - "permissions": { - "groups": { - "sonar-administrators": "admin", - "sonar-users": "user" - } - }, - "projects": { - "manual": { - "BANKING-INVESTMENT-EQUITY": "-DEFAULT_BRANCH-", - "BANKING-INVESTMENT-MERGER": "-DEFAULT_BRANCH-", - "BANKING-PORTAL": [ - "comma,branch", - "main", - "release-3.2" - ] - } - }, - "visibility": "private" + "docker": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "PORT_FAV_PROJECTS": { - "name": "My favorite projects", - "permissions": { - "groups": { - "sonar-administrators": "admin", - "sonar-users": "user" - } - }, - "projects": { - "manual": { - "ai-code-fix": "-DEFAULT_BRANCH-", - "code-variants": "-DEFAULT_BRANCH-", - "creedengo-issues": "-DEFAULT_BRANCH-", - "demo-rules": "-DEFAULT_BRANCH-", - "demo:autoconfig": "-DEFAULT_BRANCH-", - "demo:coverage": "-DEFAULT_BRANCH-", - "mute-in-ide": "-DEFAULT_BRANCH-" - } - }, - "visibility": "private" + "flex": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "Private_Banking": { - "name": "Private Banking", - "permissions": { - "groups": { - "sonar-administrators": "admin" - } - }, - "projects": { - "branch": "-DEFAULT_BRANCH-", - "tags": "private-banking" - }, - "visibility": "public" - } - }, - "projects": { - "25k-issues": { - "name": "25k-issues", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" + "githubactions": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-ACQUISITIONS": { - "name": "BANKING-ACQUISITIONS", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "go": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-ACQUISITIONS-DILIGENCE": { - "name": "BANKING-ACQUISITIONS-DILIGENCE", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "ipynb": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-AFRICA-OPS": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Banking Africa operations", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "java": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "Security Max": { + "addedRules": [ + { + "key": "java:S2647" + }, + { + "key": "java:S2658" + }, + { + "key": "java:S6374" + }, + { + "key": "java:Don_t_be_rude", + "severities": { + "MAINTAINABILITY": "-DEFAULT-", + "SECURITY": "LOW" + }, + "params": { + "message": "Hey don't be rude!", + "regularExpression": "(fuck|shit|merde)" + } + } + ] + }, + "Sonar Way + Checkstyle": { + "addedRules": [ + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.InnerAssignmentCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidDoubleBraceInitializationCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.ParameterAssignmentCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidNoArgumentSuperConstructorCallCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.InnerTypeLastCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MissingCtorCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MissingSwitchDefaultCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MultipleVariableDeclarationsCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.FinalClassCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocPackageCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.CovariantEqualsCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.UpperEllCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidInlineConditionalsCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.imports.RedundantImportCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SuperCloneCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.HideUtilityClassConstructorCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.annotation.PackageAnnotationCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.OuterTypeFilenameCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoFinalizerCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.ConstructorsDeclarationGroupingCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.javadoc.InvalidJavadocPositionCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanReturnCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.whitespace.NoWhitespaceBeforeCaseDefaultColonCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.OverloadMethodsDeclarationOrderCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.UnusedLocalVariableCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoCloneCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.StringLiteralEqualityCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EmptyStatementCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SuperFinalizeCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EqualsHashCodeCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.OneTopLevelClassCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.modifier.ModifierOrderCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanExpressionCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoEnumTrailingCommaCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.UnnecessarySemicolonInEnumerationCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoArrayTrailingCommaCheck" + }, + { + "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.NoCodeInFileCheck" + } + ] + } } - }, - "tags": "africa", - "visibility": "private" + } }, - "BANKING-INVESTMENT-EQUITY": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-INVESTMENT-EQUITY", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" + "jcl": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "All rules": { + "addedRules": [ + { + "key": "jcl:S2260" + }, + { + "key": "jcl:S6945", + "params": { + "allowedUnconditionalSteps": "2" + } + }, + { + "key": "jcl:S6935" + }, + { + "key": "jcl:S6947", + "params": { + "maxSteps": "50" + } + }, + { + "key": "jcl:S6942" + }, + { + "key": "jcl:S6977" + }, + { + "key": "jcl:Track_usage_of_rogue_programs", + "severities": { + "MAINTAINABILITY": "-DEFAULT-", + "RELIABILITY": "-DEFAULT-", + "SECURITY": "INFO" + }, + "params": { + "programName": "ROGUEPROG", + "replacementProgramName": "OKPROG" + } + } + ] + } } - }, - "visibility": "private" + } }, - "BANKING-INVESTMENT-MERGER": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-INVESTMENT-MERGER", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" + "js": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "security-max": { + "addedRules": [ + { + "key": "javascript:S2817" + }, + { + "key": "javascript:S1442" + }, + { + "key": "javascript:S1525" + } + ] + } } - }, - "visibility": "private" + } }, - "BANKING-MERGERS": { - "name": "BANKING-MERGERS", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "json": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-PORTAL": { - "branches": { - "comma,branch": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - }, - "release-3.2": { - "keepWhenInactive": true - } - }, - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-PORTAL", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" - }, - "BANKING-PRIVATE-ASSETS": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-PRIVATE-ASSETS", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" - }, - "BANKING-PRIVATE-WEALTH": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Wealth Management", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "tags": "banking, private-banking", - "visibility": "private" + "jsp": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-RETAIL-ATM": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Retail - ATM", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } + "kotlin": { + "No rules": { + "rules": [ + { + "key": "kotlin:S3329", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } + } + ] }, - "tags": "banking, retail", - "visibility": "private" + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-RETAIL-CLERK": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Retail Clerk", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "tags": "banking, retail", - "visibility": "private" + "kubernetes": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-TRADING-EURO": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-TRADING-EURO", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "neutral": { + "Neutral": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-TRADING-JAPAN": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-TRADING-JAPAN", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "objc": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "BANKING-TRADING-NASDAQ": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-TRADING-NASDAQ", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" + "php": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "INSURANCE-HEALTH": { - "name": "INSURANCE-HEALTH", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin" - } - }, - "visibility": "private" + "pli": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, - "INSURANCE-HOME": { - "name": "INSURANCE-HOME", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "INSURANCE-LIFE": { - "name": "INSURANCE-LIFE", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "INSURANCE-PET": { - "name": "INSURANCE-PET", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "RETAIL-WEB": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Retail Web", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "tags": "banking, retail", - "visibility": "private" - }, - "TEST": { - "name": "name", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin" - } - }, - "visibility": "private" - }, - "TESTSYNC": { - "name": "TESTSYNC", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin" - } - }, - "visibility": "private" - }, - "ai-code-fix": { - "name": "AI CodeFix examples", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "sonar.autodetect.ai.code": false, - "tags": "demo", - "visibility": "private" - }, - "autoconf-protobuf": { - "name": "autoconf-protobuf", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "sonar.cfamily.customTargetArch": "aarch64_32", - "sonar.cfamily.customTargetEnv": "gnuabi64", - "sonar.cfamily.customTargetSystem": "cuda", - "sonar.cfamily.customTargetVendor": "nvidia", - "visibility": "private" - }, - "bad:stale-project": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "BANKING-ASIA-OPS", - "permissions": { - "groups": { - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" - }, - "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, user" - } - }, - "visibility": "private" - }, - "checkstyle-issues": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Project with checkstyle issues", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "qualityProfiles": { - "java": "Sonar Way + Checkstyle" - }, - "visibility": "private" - }, - "code-variants": { - "name": "code-variants", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "creedengo-issues": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Creedengo", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "sonar.coverage.exclusions": "**/*.css, **/.htm*", - "visibility": "private" - }, - "demo-autoconfig": { - "name": "demo-autoconfig", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user" - } - }, - "visibility": "private" - }, - "demo-rules": { - "name": "demo-rules", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:ado-cli": { - "name": "demo:ado-cli", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:autoconfig": { - "name": "demo:autoconfig", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:autoconfig:carbon": { - "branches": { - "develop": { - "isMain": true - } - }, - "name": "demo:autoconfig:carbon", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:coverage": { - "name": "demo:coverage", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-cli": { - "name": "GitHub / Actions / CLI", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-maven": { - "binding": { - "key": "GitHub okorach", - "repository": "okorach/demo-actions-maven", - "summaryCommentEnabled": true - }, - "name": "demo:github-actions-maven", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-mono-cli": { - "branches": { - "master": { - "isMain": true - } - }, - "name": "GitHub / Actions / monorepo CLI", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-mono-dotnet": { - "branches": { - "master": { - "isMain": true - } - }, - "name": "GitHub / Actions / monorepo .Net Core", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-mono-gradle": { - "branches": { - "master": { - "isMain": true - } - }, - "name": "GitHub / Actions / monorepo Gradle", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:github-actions-mono-maven": { - "branches": { - "main": { - "isMain": true - }, - "master": { - "keepWhenInactive": true - } - }, - "name": "demo:github-actions-mono-maven", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:gitlab-ci-maven": { - "name": "GitLab-CI / Maven", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:gitlab:gradle": { - "name": "demo:gitlab:gradle", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:gitlab:scanner-cli": { - "binding": { - "key": "gitlab.com", - "repository": "30584574" - }, - "branches": { - "main": { - "isMain": true - }, - "master": { - "keepWhenInactive": true - } - }, - "name": "demo:gitlab:scanner-cli", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - } - }, - "visibility": "private" - }, - "demo:java-security": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "security", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user" - } - }, - "visibility": "private" - }, - "demo:jcl": { - "name": "JCL Demo", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:juice-shop": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "https://owasp-juice.shop" - }, - { - "name": "scm", - "type": "scm", - "url": "https://github.com/juice-shop/juice-shop.git" - }, - { - "name": "issue", - "type": "issue", - "url": "https://github.com/juice-shop/juice-shop/issues" - } - ], - "name": "juice-shop", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin" - } - }, - "visibility": "private" - }, - "demo:sca-log4shell-detect-maven": { - "branches": { - "main": { - "isMain": true - } - }, - "links": [ - { - "name": "scm", - "type": "scm", - "url": "https://github.com/okorach/log4shell-detect" - }, - { - "name": "homepage", - "type": "homepage", - "url": "https://github.com/okorach/log4shell-detect" - } - ], - "name": "SCA demo - Log4shell detect - Maven", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "demo:secrets": { - "name": "Secrets detection", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "qualityProfiles": { - "secrets": "Corp Way" - }, - "sonar.text.inclusions": "**/*, **/*.bash, **/*.conf, **/*.config, **/*.ksh, **/*.pem, **/*.properties, **/*.ps1, **/*.sh, **/*.zsh, .aws/config, .env, **/*.xml", - "tags": "demo", - "visibility": "private" - }, - "demo:target-awareness": { - "name": "demo:target-awareness", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "dotnet-with-cli": { - "name": "dotnet-with-cli", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "dvpa": { - "name": "dvpa", - "newCodePeriod": "NUMBER_OF_DAYS = 30", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "sonar.cfamily.generateComputedConfig": false, - "visibility": "private" - }, - "exclusions-2": { - "name": "exclusions-2", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "gradle-with-cli": { - "name": "gradle-with-cli", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "juice-shop": { - "links": [ - { - "name": "scm", - "type": "scm", - "url": "https://github.com/juice-shop/juice-shop.git" - }, - { - "name": "issue", - "type": "issue", - "url": "https://github.com/juice-shop/juice-shop/issues" - }, - { - "name": "homepage", - "type": "homepage", - "url": "https://owasp-juice.shop" - } - ], - "name": "juice-shop", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "maven-with-cli": { - "name": "maven-with-cli", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "mute-in-ide": { - "name": "Mute issue in IDE", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "no-scm": { - "name": "no-scm", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach-org_pr-demo_3a1857ec-cebc-49f2-96ac-9bbc99111469": { - "binding": { - "key": "GitHub okorach-org", - "repository": "okorach-org/pr-demo", - "summaryCommentEnabled": true - }, - "branches": { - "master": { - "isMain": true - } - }, - "name": "pr-demo", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach_audio-video-tools": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "name": "okorach_audio-video-tools", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach_demo-gitlabci-cli_e81d5112-e681-44b2-aee4-62b56c8ac5cb": { - "name": "okorach_demo-gitlabci-cli_e81d5112-e681-44b2-aee4-62b56c8ac5cb", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach_demo-gitlabci-maven": { - "name": "okorach_demo-gitlabci-maven", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach_docker-hello-world": { - "name": "okorach_docker-hello-world", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "okorach_sonar-tools": { - "branches": { - "comma,branch": { - "keepWhenInactive": true, - "newCodePeriod": "REFERENCE_BRANCH = develop" - }, - "develop": { - "keepWhenInactive": true, - "newCodePeriod": "REFERENCE_BRANCH = master" - }, - "master": { - "isMain": true - } - }, - "name": "Sonar Tools", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "qualityGate": "\ud83e\udd47 1 - Corp Gold", - "qualityProfiles": { - "py": "Olivier Way" - }, - "sonar.cfamily.ignoreHeaderComments": false, - "sonar.issue.ignore.multicriteria": [ - { - "resourceKey": "**/*.java", - "ruleKey": "java:S1195" - }, - { - "resourceKey": "**/*.py", - "ruleKey": "python:S211" - } - ], - "tags": "python", - "visibility": "private" - }, - "okorach_sonar-tools-target": { - "branches": { - "comma,branch": { - "keepWhenInactive": true - }, - "develop": { - "keepWhenInactive": true - }, - "master": { - "isMain": true - } - }, - "name": "Sonar Tools Target", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "org.owasp.webgoat:webgoat": { - "branches": { - "main": { - "isMain": true - } - }, - "links": [ - { - "name": "scm", - "type": "scm", - "url": "https://github.com/WebGoat/WebGoat" - }, - { - "name": "homepage", - "type": "homepage", - "url": "https://github.com/WebGoat/WebGoat" - }, - { - "name": "issue", - "type": "issue", - "url": "https://github.com/WebGoat/WebGoat/issues" - } - ], - "name": "WebGoat", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "qualityProfiles": { - "java": "Security Max" - }, - "visibility": "private" - }, - "project-without-analyses": { - "name": "Project without analyses", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "project1": { - "branches": { - "develop": { - "keepWhenInactive": true, - "newCodePeriod": "REFERENCE_BRANCH = main" - }, - "feature/new-feature": { - "newCodePeriod": "REFERENCE_BRANCH = develop" - }, - "main": { - "isMain": true, - "newCodePeriod": "PREVIOUS_VERSION" - }, - "release-3.x": { - "keepWhenInactive": true, - "newCodePeriod": "NUMBER_OF_DAYS = 80" - }, - "some-branch": { - "newCodePeriod": "NUMBER_OF_DAYS = 30" - } - }, - "name": "Project 1", - "newCodePeriod": "PREVIOUS_VERSION", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "sonar.coverage.jacoco.xmlReportPaths": "**/*jacoco*.xml", - "visibility": "private" - }, - "project2": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "name": "Project 2", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "project3": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "name": "Project 3", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "project4": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "name": "Project 4", - "permissions": { - "groups": { - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "proyecto5": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "name": "Project 5", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "tags": "python", - "visibility": "private" - }, - "pytorch": { - "name": "pytorch", - "permissions": { - "groups": { - "project-admins": "admin, user", - "sonar-administrators": "admin", - "sonar-users": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "source-key": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "master": { - "isMain": true - } - }, - "name": "Source", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "third-party-issues": { - "branches": { - "develop": { - "keepWhenInactive": true - }, - "main": { - "isMain": true - } - }, - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "Third party issues", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user" - } - }, - "visibility": "private" - }, - "training:complexity": { - "name": "Training: Cyclomatic vs Cognitive complexity", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - } - }, - "visibility": "private" - }, - "training:external-issues": { - "name": "Training: External issues import", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - } - }, - "visibility": "private" - }, - "training:security": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "http://maven.apache.org" - } - ], - "name": "training:security", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" - } - }, - "visibility": "private" - }, - "web-backend": { - "name": "Web back-end", - "permissions": { - "groups": { - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user" - } - }, - "visibility": "private" - }, - "web-frontend": { - "links": [ - { - "name": "homepage", - "type": "homepage", - "url": "https://owasp-juice.shop" - }, - { - "name": "scm", - "type": "scm", - "url": "https://github.com/juice-shop/juice-shop.git" - }, - { - "name": "issue", - "type": "issue", - "url": "https://github.com/juice-shop/juice-shop/issues" - } - ], - "name": "Web front-end", - "permissions": { - "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", - "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - }, - "users": { - "admin": "admin, codeviewer, user" - } - }, - "tags": "3ds", - "visibility": "private" - } - }, - "qualityGates": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - }, - "Sonar way + SCA": { - "conditions": [ - "new_coverage <= 80", - "new_duplicated_lines_density >= 3", - "new_security_hotspots_reviewed <= 100", - "new_violations >= 0", - "sca_severity_licensing >= 19", - "sca_severity_vulnerability >= 19" - ] - }, - "Sonar way for AI Code": { - "isBuiltIn": true - }, - "\ud83e\udd47 1 - Corp Gold": { - "conditions": [ - "new_coverage <= 80", - "new_duplicated_lines_density >= 2", - "new_security_hotspots_reviewed <= 100", - "new_violations >= 0", - "prioritized_rule_issues >= 0", - "sca_severity_any_issue >= 19", - "software_quality_blocker_issues >= 0", - "software_quality_reliability_rating >= C", - "software_quality_security_rating >= C" - ] - }, - "\ud83e\udd48 2 - Corp Silver": { - "conditions": [ - "new_coverage <= 50", - "new_duplicated_lines_density >= 3", - "new_security_hotspots_reviewed <= 100", - "new_violations >= 0", - "prioritized_rule_issues >= 0", - "software_quality_security_rating >= C" - ] - }, - "\ud83e\udd49 3 - Corp base": { - "conditions": [ - "new_duplicated_lines_density >= 3", - "new_software_quality_maintainability_rating >= A", - "new_software_quality_reliability_issues >= 0", - "new_software_quality_security_issues >= 0" - ] - } - }, - "qualityProfiles": { - "abap": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "ansible": { - "Sonar way": { - "children": { - "Test": {} - }, - "isBuiltIn": true, - "isDefault": true - } - }, - "apex": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "azureresourcemanager": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "c": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "cloudformation": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "cobol": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "cpp": { - "Mission critical": { - "isBuiltIn": true - }, - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "cs": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "css": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "dart": { - "Sonar way": { - "children": { - "Corp Way": { - "children": { - "Critical projects": { - "addedRules": [ - { - "key": "dart:S106" - }, - { - "key": "dart:S1541" - }, - { - "key": "dart:S7084" - }, - { - "key": "dart:S113" - }, - { - "key": "dart:S115" - }, - { - "key": "dart:S7103", - "severities": { - "MAINTAINABILITY": "HIGH" - } - }, - { - "key": "dart:S1854" - } - ] - } - } - } - }, - "isBuiltIn": true, - "isDefault": true - } - }, - "docker": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "flex": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "go": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "ipynb": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "java": { - "Sonar way": { - "children": { - "Security Max": { - "addedRules": [ - { - "key": "java:S2647" - }, - { - "key": "java:S2658" - }, - { - "key": "java:S6374" - }, - { - "key": "java:Don_t_be_rude" - } - ] - }, - "Sonar Way + Checkstyle": { - "addedRules": [ - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.InnerAssignmentCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidDoubleBraceInitializationCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.ParameterAssignmentCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidNoArgumentSuperConstructorCallCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.InnerTypeLastCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MissingCtorCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MissingSwitchDefaultCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MultipleVariableDeclarationsCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.FinalClassCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocPackageCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.CovariantEqualsCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.UpperEllCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.AvoidInlineConditionalsCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.imports.RedundantImportCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SuperCloneCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.HideUtilityClassConstructorCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.annotation.PackageAnnotationCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.OuterTypeFilenameCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoFinalizerCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.ConstructorsDeclarationGroupingCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.javadoc.InvalidJavadocPositionCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanReturnCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.whitespace.NoWhitespaceBeforeCaseDefaultColonCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.OverloadMethodsDeclarationOrderCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.UnusedLocalVariableCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoCloneCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.StringLiteralEqualityCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EmptyStatementCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SuperFinalizeCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EqualsHashCodeCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.design.OneTopLevelClassCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.modifier.ModifierOrderCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.SimplifyBooleanExpressionCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoEnumTrailingCommaCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.UnnecessarySemicolonInEnumerationCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.NoArrayTrailingCommaCheck" - }, - { - "key": "checkstyle:com.puppycrawl.tools.checkstyle.checks.NoCodeInFileCheck" - } - ] - } - }, - "isBuiltIn": true, - "isDefault": true - } - }, - "jcl": { - "Sonar way": { - "children": { - "All rules": { - "addedRules": [ - { - "key": "jcl:S2260" - }, - { - "key": "jcl:S6945" - }, - { - "key": "jcl:S6935" - }, - { - "key": "jcl:S6947" - }, - { - "key": "jcl:S6942" - }, - { - "key": "jcl:S6977" - }, - { - "key": "jcl:Track_usage_of_rogue_programs", - "severities": { - "MAINTAINABILITY": "-DEFAULT-", - "RELIABILITY": "-DEFAULT-", - "SECURITY": "INFO" - } - } - ] - } - }, - "isBuiltIn": true, - "isDefault": true - } - }, - "js": { - "Sonar way": { - "children": { - "security-max": { - "addedRules": [ - { - "key": "javascript:S2817" - }, - { - "key": "javascript:S1442" - }, - { - "key": "javascript:S1525" - } - ] - } - }, - "isBuiltIn": true, - "isDefault": true - } - }, - "json": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "jsp": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "kotlin": { - "No rules": { - "rules": [ - { - "key": "kotlin:S3329" - } - ] - }, - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "kubernetes": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "neutral": { - "Neutral": { - "isBuiltIn": true, - "isDefault": true - } - }, - "objc": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "php": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "pli": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "plsql": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } + "plsql": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } }, "py": { "Prioritized": { "rules": [ { - "key": "python:BackticksUsage" + "key": "python:BackticksUsage", + "severity": "BLOCKER", + "impacts": { + "MAINTAINABILITY": "BLOCKER" + } }, { - "key": "python:ExecStatementUsage" + "key": "python:ExecStatementUsage", + "severity": "BLOCKER", + "impacts": { + "MAINTAINABILITY": "BLOCKER" + } }, { "key": "python:InequalityUsage", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, "prioritized": true }, { - "key": "python:PreIncrementDecrement" + "key": "python:PreIncrementDecrement", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:PrintStatementUsage" + "key": "python:PrintStatementUsage", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { "key": "python:S100", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + }, "params": { "format": "^[a-z_][a-z0-9_]*$" } }, { "key": "python:S101", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + }, "params": { "format": "^_?([A-Z_][a-zA-Z0-9]*|[a-z_][a-z0-9_]*)$" } }, { - "key": "python:S1045" + "key": "python:S1045", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1066" + "key": "python:S1066", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { "key": "python:S107", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, "params": { "max": "13" } }, { - "key": "python:S108" + "key": "python:S108", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1110" + "key": "python:S1110", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S112" + "key": "python:S112", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1134" + "key": "python:S1134", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1135" + "key": "python:S1135", + "severity": "INFO", + "impacts": { + "MAINTAINABILITY": "INFO" + } }, { - "key": "python:S1143" + "key": "python:S1143", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S1144" + "key": "python:S1144", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { "key": "python:S116", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + }, "params": { "format": "^[_a-z][_a-z0-9]*$" } }, { "key": "python:S117", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + }, "params": { "format": "^[_a-z][a-z0-9_]*$" } }, { - "key": "python:S1172" + "key": "python:S1172", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1186" + "key": "python:S1186", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { "key": "python:S1192", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + }, "params": { - "exclusionRegex": "", - "threshold": "3" + "threshold": "3", + "exclusionRegex": "" } }, { - "key": "python:S1226" + "key": "python:S1226", + "severity": "MINOR", + "impacts": { + "RELIABILITY": "LOW" + } }, { - "key": "python:S1244" + "key": "python:S1244", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { "key": "python:S125", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, "params": { "exception": "(fmt|py\\w+):.*" } }, { - "key": "python:S1313" + "key": "python:S1313", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { "key": "python:S1481", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + }, "params": { "regex": "(_[a-zA-Z0-9_]*|dummy|unused|ignored)" } }, { - "key": "python:S1515" + "key": "python:S1515", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { "key": "python:S1542", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, "params": { "format": "^[a-z_][a-z0-9_]*$" } }, { - "key": "python:S1607" + "key": "python:S1607", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1656" + "key": "python:S1656", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1700" + "key": "python:S1700", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1716" + "key": "python:S1716", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S1751" + "key": "python:S1751", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1763" + "key": "python:S1763", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1764" + "key": "python:S1764", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1845" + "key": "python:S1845", + "severity": "BLOCKER", + "impacts": { + "MAINTAINABILITY": "BLOCKER" + } }, { - "key": "python:S1854" + "key": "python:S1854", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1862" + "key": "python:S1862", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S1871" + "key": "python:S1871", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S1940" + "key": "python:S1940", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S2053" + "key": "python:S2053", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { "key": "python:S2068", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + }, "params": { "credentialWords": "password,passwd,pwd,passphrase" } }, { - "key": "python:S2077" + "key": "python:S2077", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S2092" + "key": "python:S2092", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { - "key": "python:S2115" + "key": "python:S2115", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S2159" + "key": "python:S2159", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S2190" + "key": "python:S2190", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S2201" + "key": "python:S2201", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S2208" + "key": "python:S2208", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S2245" + "key": "python:S2245", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S2257" + "key": "python:S2257", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S2275" + "key": "python:S2275", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S2612" + "key": "python:S2612", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S2638" + "key": "python:S2638", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { "key": "python:S2710", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + }, "params": { "classParameterNames": "cls,mcs,metacls" } }, { "key": "python:S2711", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + }, "prioritized": true }, { "key": "python:S2734", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + }, "prioritized": true }, { - "key": "python:S2737" + "key": "python:S2737", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S2755" + "key": "python:S2755", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S2757" + "key": "python:S2757", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S2761" + "key": "python:S2761", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S2772" + "key": "python:S2772", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S2823" + "key": "python:S2823", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S2836" + "key": "python:S2836", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S2876" + "key": "python:S2876", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S3329" + "key": "python:S3329", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S3330" + "key": "python:S3330", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { - "key": "python:S3358" + "key": "python:S3358", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S3403" + "key": "python:S3403", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S3457" + "key": "python:S3457", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S3516" + "key": "python:S3516", + "severity": "BLOCKER", + "impacts": { + "MAINTAINABILITY": "BLOCKER" + } }, { - "key": "python:S3626" + "key": "python:S3626", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S3699" + "key": "python:S3699", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S3752" + "key": "python:S3752", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { "key": "python:S3776", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + }, "params": { "threshold": "15" } }, { - "key": "python:S3827" + "key": "python:S3827", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S3862" + "key": "python:S3862", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S3923" + "key": "python:S3923", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S3981" + "key": "python:S3981", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S3984" + "key": "python:S3984", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S3985" + "key": "python:S3985", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S4143" + "key": "python:S4143", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S4144" + "key": "python:S4144", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S4423" + "key": "python:S4423", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S4426" + "key": "python:S4426", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S4433" + "key": "python:S4433", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { "key": "python:S4487", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + }, "params": { "enableSingleUnderscoreIssues": "false" } }, { - "key": "python:S4502" + "key": "python:S4502", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S4507" + "key": "python:S4507", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { - "key": "python:S4790" + "key": "python:S4790", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S4828" + "key": "python:S4828", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S4830" + "key": "python:S4830", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5042" + "key": "python:S5042", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S5122" + "key": "python:S5122", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { - "key": "python:S5247" + "key": "python:S5247", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S5332" + "key": "python:S5332", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S5344" + "key": "python:S5344", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5361" + "key": "python:S5361", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5443" + "key": "python:S5443", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S5445" + "key": "python:S5445", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5527" + "key": "python:S5527", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5542" + "key": "python:S5542", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5547" + "key": "python:S5547", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5549" + "key": "python:S5549", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5603" + "key": "python:S5603", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5607" + "key": "python:S5607", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5632" + "key": "python:S5632", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5642" + "key": "python:S5642", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5644" + "key": "python:S5644", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5655" + "key": "python:S5655", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5659" + "key": "python:S5659", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S5685" + "key": "python:S5685", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S5704" + "key": "python:S5704", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5706" + "key": "python:S5706", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5707" + "key": "python:S5707", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S5708" + "key": "python:S5708", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5709" + "key": "python:S5709", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5712" + "key": "python:S5712", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5713" + "key": "python:S5713", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S5714" + "key": "python:S5714", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5717" + "key": "python:S5717", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5719" + "key": "python:S5719", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { "key": "python:S5720", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + }, "params": { "ignoredDecorators": "abstractmethod" } }, { - "key": "python:S5722" + "key": "python:S5722", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5724" + "key": "python:S5724", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5727" + "key": "python:S5727", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5747" + "key": "python:S5747", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5754" + "key": "python:S5754", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5756" + "key": "python:S5756", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5780" + "key": "python:S5780", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5781" + "key": "python:S5781", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5795" + "key": "python:S5795", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5796" + "key": "python:S5796", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S5797" + "key": "python:S5797", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S5799" + "key": "python:S5799", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5806" + "key": "python:S5806", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5807" + "key": "python:S5807", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5828" + "key": "python:S5828", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5842" + "key": "python:S5842", + "severity": "MINOR", + "impacts": { + "RELIABILITY": "LOW" + } }, { "key": "python:S5843", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, "params": { "maxComplexity": "20" } }, { - "key": "python:S5845" + "key": "python:S5845", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S5850" + "key": "python:S5850", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S5852" + "key": "python:S5852", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S5855" + "key": "python:S5855", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S5857" + "key": "python:S5857", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S5860" + "key": "python:S5860", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5864" + "key": "python:S5864", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5868" + "key": "python:S5868", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S5869" + "key": "python:S5869", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5886" + "key": "python:S5886", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5890" + "key": "python:S5890", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5899" + "key": "python:S5899", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5905" + "key": "python:S5905", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S5906" + "key": "python:S5906", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S5914" + "key": "python:S5914", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S5915" + "key": "python:S5915", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S5918" + "key": "python:S5918", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S5994" + "key": "python:S5994", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S5996" + "key": "python:S5996", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6001" + "key": "python:S6001", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6002" + "key": "python:S6002", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6019" + "key": "python:S6019", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6035" + "key": "python:S6035", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6252" + "key": "python:S6252", + "severity": "MINOR", + "impacts": { + "SECURITY": "MINOR" + } }, { - "key": "python:S6265" + "key": "python:S6265", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6270" + "key": "python:S6270", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6275" + "key": "python:S6275", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6281" + "key": "python:S6281", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { - "key": "python:S6302" + "key": "python:S6302", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6303" + "key": "python:S6303", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6304" + "key": "python:S6304", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6308" + "key": "python:S6308", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6317" + "key": "python:S6317", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S6319" + "key": "python:S6319", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6321" + "key": "python:S6321", + "severity": "MINOR", + "impacts": { + "SECURITY": "LOW" + } }, { - "key": "python:S6323" + "key": "python:S6323", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6326" + "key": "python:S6326", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6327" + "key": "python:S6327", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6328" + "key": "python:S6328", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6329" + "key": "python:S6329", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6330" + "key": "python:S6330", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6331" + "key": "python:S6331", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6332" + "key": "python:S6332", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6333" + "key": "python:S6333", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6353" + "key": "python:S6353", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S6377" + "key": "python:S6377", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } }, { - "key": "python:S6395" + "key": "python:S6395", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6396" + "key": "python:S6396", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6397" + "key": "python:S6397", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { "key": "python:S6418", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + }, "params": { "credentialWords": "api[_.-]?key,auth,credential,secret,token", "randomnessSensibility": "3.0" } }, { - "key": "python:S6437" + "key": "python:S6437", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6463" + "key": "python:S6463", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "python:S6468" + "key": "python:S6468", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6537" + "key": "python:S6537", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6546" + "key": "python:S6546", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6552" + "key": "python:S6552", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6553" + "key": "python:S6553", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6556" + "key": "python:S6556", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6559" + "key": "python:S6559", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6560" + "key": "python:S6560", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6659" + "key": "python:S6659", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S6660" + "key": "python:S6660", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S6662" + "key": "python:S6662", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6663" + "key": "python:S6663", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6709" + "key": "python:S6709", + "severity": "MAJOR", + "impacts": { + "SECURITY": "LOW", + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6711" + "key": "python:S6711", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6714" + "key": "python:S6714", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "LOW", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6725" + "key": "python:S6725", + "severity": "BLOCKER", + "impacts": { + "MAINTAINABILITY": "BLOCKER" + } }, { - "key": "python:S6727" + "key": "python:S6727", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "LOW", + "SECURITY": "LOW", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6729" + "key": "python:S6729", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6730" + "key": "python:S6730", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6734" + "key": "python:S6734", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6735" + "key": "python:S6735", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6741" + "key": "python:S6741", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6742" + "key": "python:S6742", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6779" + "key": "python:S6779", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6781" + "key": "python:S6781", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "python:S6785" + "key": "python:S6785", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "python:S6786" + "key": "python:S6786", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } }, { - "key": "python:S6792" + "key": "python:S6792", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6794" + "key": "python:S6794", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6795" + "key": "python:S6795", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6796" + "key": "python:S6796", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6799" + "key": "python:S6799", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6882" + "key": "python:S6882", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "MEDIUM", + "SECURITY": "LOW", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6883" + "key": "python:S6883", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6887" + "key": "python:S6887", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6890" + "key": "python:S6890", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "LOW", + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6894" + "key": "python:S6894", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6900" + "key": "python:S6900", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "MEDIUM", + "SECURITY": "LOW", + "MAINTAINABILITY": "HIGH" + } }, { - "key": "python:S6903" + "key": "python:S6903", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6908" + "key": "python:S6908", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6911" + "key": "python:S6911", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6918" + "key": "python:S6918", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6919" + "key": "python:S6919", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6925" + "key": "python:S6925", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6928" + "key": "python:S6928", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6929" + "key": "python:S6929", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6969" + "key": "python:S6969", + "severity": "MINOR", + "impacts": { + "MAINTAINABILITY": "LOW" + } }, { - "key": "python:S6971" + "key": "python:S6971", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6972" + "key": "python:S6972", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6973" + "key": "python:S6973", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "LOW", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6974" + "key": "python:S6974", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6978" + "key": "python:S6978", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6979" + "key": "python:S6979", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "python:S6982" + "key": "python:S6982", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "LOW", + "RELIABILITY": "MEDIUM" + } }, { - "key": "python:S6983" + "key": "python:S6983", + "severity": "MINOR", + "impacts": { + "RELIABILITY": "LOW" + } }, { - "key": "python:S6984" + "key": "python:S6984", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "python:S6985" + "key": "python:S6985", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "CRITICAL" + } }, { "key": "python:S905", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + }, "params": { - "ignoredOperators": "<<,>>,|", - "reportOnStrings": "false" + "reportOnStrings": "false", + "ignoredOperators": "<<,>>,|" } }, { - "key": "python:S930" + "key": "python:S930", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "python:S935" + "key": "python:S935", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "pythonbugs:S2259" + "key": "pythonbugs:S2259", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonbugs:S2583" + "key": "pythonbugs:S2583", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonbugs:S2589" + "key": "pythonbugs:S2589", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonbugs:S3518" + "key": "pythonbugs:S3518", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "pythonbugs:S5633" + "key": "pythonbugs:S5633", + "severity": "BLOCKER", + "impacts": { + "RELIABILITY": "BLOCKER" + } }, { - "key": "pythonbugs:S6417" + "key": "pythonbugs:S6417", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonbugs:S6464" + "key": "pythonbugs:S6464", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "pythonbugs:S6465" + "key": "pythonbugs:S6465", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { "key": "pythonbugs:S6466", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + }, "prioritized": true }, { - "key": "pythonbugs:S6886" + "key": "pythonbugs:S6886", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "pythonbugs:S6899" + "key": "pythonbugs:S6899", + "severity": "CRITICAL", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "pythonenterprise:S7181" + "key": "pythonenterprise:S7181", + "severity": "CRITICAL", + "impacts": { + "MAINTAINABILITY": "HIGH" + } }, { - "key": "pythonenterprise:S7182" + "key": "pythonenterprise:S7182", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7187" + "key": "pythonenterprise:S7187", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7189" + "key": "pythonenterprise:S7189", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7191" + "key": "pythonenterprise:S7191", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7192" + "key": "pythonenterprise:S7192", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7193" + "key": "pythonenterprise:S7193", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7195" + "key": "pythonenterprise:S7195", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "MEDIUM" + } }, { "key": "pythonenterprise:S7196", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "LOW", + "RELIABILITY": "MEDIUM" + }, "params": { - "comparisonThreshold": "5", - "nestedCallThreshold": "5" + "nestedCallThreshold": "5", + "comparisonThreshold": "5" } }, { - "key": "pythonenterprise:S7468" + "key": "pythonenterprise:S7468", + "severity": "MAJOR", + "impacts": { + "RELIABILITY": "HIGH" + } }, { - "key": "pythonenterprise:S7469" + "key": "pythonenterprise:S7469", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" + } }, { - "key": "pythonenterprise:S7470" + "key": "pythonenterprise:S7470", + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonenterprise:S7471" + "key": "pythonenterprise:S7471", + "severity": "MINOR", + "impacts": { + "RELIABILITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + } }, { - "key": "pythonsecurity:S2076" + "key": "pythonsecurity:S2076", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S2078" + "key": "pythonsecurity:S2078", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S2083" + "key": "pythonsecurity:S2083", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S2091" + "key": "pythonsecurity:S2091", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S2631" + "key": "pythonsecurity:S2631", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "pythonsecurity:S3649" + "key": "pythonsecurity:S3649", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5131" + "key": "pythonsecurity:S5131", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5135" + "key": "pythonsecurity:S5135", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5144" + "key": "pythonsecurity:S5144", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } }, { - "key": "pythonsecurity:S5145" + "key": "pythonsecurity:S5145", + "severity": "MINOR", + "impacts": { + "SECURITY": "LOW" + } }, { - "key": "pythonsecurity:S5146" + "key": "pythonsecurity:S5146", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5147" + "key": "pythonsecurity:S5147", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5334" + "key": "pythonsecurity:S5334", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S5496" + "key": "pythonsecurity:S5496", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S6287" + "key": "pythonsecurity:S6287", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } }, { - "key": "pythonsecurity:S6350" + "key": "pythonsecurity:S6350", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MAJOR" + } }, { - "key": "pythonsecurity:S6639" + "key": "pythonsecurity:S6639", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } }, { - "key": "pythonsecurity:S6680" + "key": "pythonsecurity:S6680", + "severity": "CRITICAL", + "impacts": { + "SECURITY": "HIGH" + } }, { - "key": "pythonsecurity:S6776" + "key": "pythonsecurity:S6776", + "severity": "MINOR", + "impacts": { + "SECURITY": "LOW" + } }, { - "key": "pythonsecurity:S6839" + "key": "pythonsecurity:S6839", + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + } }, { - "key": "pythonsecurity:S7044" + "key": "pythonsecurity:S7044", + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM" + } + } + ] + }, + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "Olivier Way": { + "addedRules": [ + { + "key": "python:S4784" + }, + { + "key": "python:S1451", + "params": { + "isRegularExpression": "true", + "headerFormat": "(\\#!.+\\n)?(\\#.*\\n)?\\#\\ Copyright\\ \\(C\\)\\ ([12][0-9]{3}-)?2025\\ Olivier\\ Korach\\n\\#\\ mailto:olivier\\.korach\\ AT\\ gmail\\ DOT\\ com\\n\\#\\n\\#\\ This\\ program\\ is\\ free\\ software;\\ you\\ can\\ redistribute\\ it\\ and/or\\n\\#\\ modify\\ it\\ under\\ the\\ terms\\ of\\ the\\ GNU\\ Lesser\\ General\\ Public\\n\\#\\ License\\ as\\ published\\ by\\ the\\ Free\\ Software\\ Foundation;\\ either\\n\\#\\ version\\ 3\\ of\\ the\\ License,\\ or\\ \\(at\\ your\\ option\\)\\ any\\ later\\ version\\.\\n\\#\\n\\#\\ This\\ program\\ is\\ distributed\\ in\\ the\\ hope\\ that\\ it\\ will\\ be\\ useful,\\n\\#\\ but\\ WITHOUT\\ ANY\\ WARRANTY;\\ without\\ even\\ the\\ implied\\ warranty\\ of\\n\\#\\ MERCHANTABILITY\\ or\\ FITNESS\\ FOR\\ A\\ PARTICULAR\\ PURPOSE\\.\\ See\\ the\\ GNU\\n\\#\\ Lesser\\ General\\ Public\\ License\\ for\\ more\\ details\\.\\n\\#\\n\\#\\ You\\ should\\ have\\ received\\ a\\ copy\\ of\\ the\\ GNU\\ Lesser\\ General\\ Public\\ License\\n\\#\\ along\\ with\\ this\\ program;\\ if\\ not,\\ write\\ to\\ the\\ Free\\ Software\\ Foundation,\\n\\#\\ Inc\\.,\\ 51\\ Franklin\\ Street,\\ Fifth\\ Floor,\\ Boston,\\ MA\\ \\ 02110-1301,\\ USA\\.\\n\\#" + } + }, + { + "key": "python:S6543" + }, + { + "key": "python:S104", + "params": { + "maximum": "1000" + } + }, + { + "key": "python:S5856" + }, + { + "key": "python:NoSonar" + }, + { + "key": "python:S4721" + }, + { + "key": "python:S5953" + }, + { + "key": "python:S2712" + }, + { + "key": "python:S134", + "params": { + "max": "4" + } + }, + { + "key": "python:S1128", + "severities": { + "MAINTAINABILITY": "MEDIUM" + }, + "prioritized": true + }, + { + "key": "python:S4823" + } + ], + "modifiedRules": [ + { + "key": "python:InequalityUsage", + "severities": { + "MAINTAINABILITY": "HIGH" + }, + "prioritized": true + }, + { + "key": "python:S3776", + "params": { + "threshold": "20" + } + } + ] + } + } + } + }, + "rpg": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "ruby": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "rust": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "scala": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "secrets": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true, + "children": { + "Corp Way": { + "addedRules": [ + { + "key": "secrets:Corp_secrets_should_not_leak", + "params": { + "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"" + } + }, + { + "key": "secrets:My_custom_secret_rule", + "severities": { + "SECURITY": "BLOCKER" + } + } + ] } - ] + } + } + }, + "swift": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "terraform": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "text": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "ts": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "tsql": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "vb": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "vbnet": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "web": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "xml": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + }, + "yaml": { + "Sonar way": { + "isDefault": true, + "isBuiltIn": true + } + } + }, + "projects": { + "BANKING-AFRICA-OPS": { + "name": "Banking Africa operations", + "tags": "africa", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "BANKING-ASIA-OPS": { + "name": "BANKING-ASIA-OPS", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-INVESTMENT-ACQUISITIONS": { + "name": "BANKING-INVESTMENT-ACQUISITIONS", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-INVESTMENT-DILIGENCE": { + "name": "BANKING-INVESTMENT-DILIGENCE", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-INVESTMENT-EQUITY": { + "name": "BANKING-INVESTMENT-EQUITY", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-INVESTMENT-MERGER": { + "name": "BANKING-INVESTMENT-MERGER", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-PORTAL": { + "name": "BANKING-PORTAL", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + }, + "branches": { + "comma,branch": { + "keepWhenInactive": true + }, + "release-3.2": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "BANKING-PRIVATE-ASSETS": { + "name": "BANKING-PRIVATE-ASSETS", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-PRIVATE-WEALTH": { + "name": "Wealth Management", + "tags": "banking, private-banking", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "BANKING-RETAIL-ATM": { + "name": "Retail - ATM", + "tags": "banking, retail", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "BANKING-RETAIL-CLERK": { + "name": "Retail Clerk", + "tags": "banking, retail", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "BANKING-RETAIL-WEB": { + "name": "BANKING-RETAIL-WEB", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-TRADING-EURO": { + "name": "BANKING-TRADING-EURO", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-TRADING-JAPAN": { + "name": "BANKING-TRADING-JAPAN", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "BANKING-TRADING-NASDAQ": { + "name": "BANKING-TRADING-NASDAQ", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "INSURANCE-HEALTH": { + "name": "INSURANCE-HEALTH", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "INSURANCE-HOME": { + "name": "INSURANCE-HOME", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "INSURANCE-LIFE": { + "name": "INSURANCE-LIFE", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "INSURANCE-PET": { + "name": "INSURANCE-PET", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "bad:stale-project": { + "name": "BANKING-ASIA-OPS", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], + "permissions": { + "users": { + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" + }, + "groups": { + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" + } + } + }, + "demo:github-actions-maven": { + "name": "demo:github-actions-maven", + "visibility": "private", + "binding": { + "key": "GitHub okorach", + "repository": "okorach/demo-actions-maven", + "summaryCommentEnabled": true + }, + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:github-actions-mono-cli": { + "name": "GitHub / Actions / monorepo CLI", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + } + }, + "demo:github-actions-mono-dotnet": { + "name": "GitHub / Actions / monorepo .Net Core", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + }, + "sonar.text.inclusions": "**/*.sh, **/*.bash, **/*.zsh, **/*.ksh, **/*.ps1, **/*.properties, **/*.conf, **/*.pem, **/*.config, .env, .aws/config, **/*" + }, + "demo:github-actions-mono-gradle": { + "name": "GitHub / Actions / monorepo Gradle", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + } + }, + "demo:github-actions-mono-maven": { + "name": "demo:github-actions-mono-maven", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "demo:gitlab-ci-maven": { + "name": "GitLab-CI / Maven", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:gitlab:gradle": { + "name": "demo:gitlab:gradle", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:gitlab:scanner-cli": { + "name": "demo:gitlab:scanner-cli", + "visibility": "private", + "binding": { + "key": "gitlab.com", + "repository": "30584574" + }, + "permissions": { + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "demo:java-security": { + "name": "security", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], + "permissions": { + "users": { + "admin": "admin, codeviewer, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:jcl": { + "name": "JCL Demo", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:secrets": { + "name": "Secrets detection", + "tags": "demo", + "visibility": "private", + "qualityProfiles": { + "secrets": "Corp Way" + }, + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "sonar.text.inclusions": "**/*, **/*.bash, **/*.conf, **/*.config, **/*.ksh, **/*.pem, **/*.properties, **/*.ps1, **/*.sh, **/*.zsh, .aws/config, .env, **/*.xml" + }, + "no-scm": { + "name": "no-scm", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "okorach-org_pr-demo_3a1857ec-cebc-49f2-96ac-9bbc99111469": { + "name": "pr-demo", + "visibility": "private", + "binding": { + "key": "GitHub okorach-org", + "repository": "okorach-org/pr-demo", + "summaryCommentEnabled": true + }, + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + } + }, + "okorach_audio-video-tools": { + "name": "okorach_audio-video-tools", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "main": { + "isMain": true + }, + "develop": { + "keepWhenInactive": true + } + } + }, + "okorach_demo-gitlabci-cli_e81d5112-e681-44b2-aee4-62b56c8ac5cb": { + "name": "okorach_demo-gitlabci-cli_e81d5112-e681-44b2-aee4-62b56c8ac5cb", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "okorach_demo-gitlabci-maven": { + "name": "okorach_demo-gitlabci-maven", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "okorach_sonar-tools": { + "name": "Sonar Tools", + "tags": "python", + "visibility": "private", + "qualityProfiles": { + "py": "Olivier Way" + }, + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "develop": { + "newCodePeriod": "REFERENCE_BRANCH = master", + "keepWhenInactive": true + }, + "master": { + "isMain": true + } + }, + "qualityGate": "\ud83e\udd47 1 - Corp Gold", + "sonar.autodetect.ai.code": "true", + "sonar.cfamily.ignoreHeaderComments": "false", + "sonar.issue.ignore.multicriteria": [ + { + "resourceKey": "**/*.java", + "ruleKey": "java:S1195" + }, + { + "resourceKey": "**/*.py", + "ruleKey": "python:S211" + } + ] + }, + "project-without-analyses": { + "name": "Project without analyses", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "project1": { + "name": "Project 1", + "visibility": "private", + "newCodePeriod": "PREVIOUS_VERSION", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } }, - "Sonar way": { - "children": { - "Olivier Way": { - "addedRules": [ - { - "key": "python:S4784" - }, - { - "key": "python:S1451" - }, - { - "key": "python:S6543" - }, - { - "key": "python:S5856" - }, - { - "key": "python:NoSonar" - }, - { - "key": "python:S4721" - }, - { - "key": "python:S5953" - }, - { - "key": "python:S2712" - }, - { - "key": "python:S134" - }, - { - "key": "python:S1128", - "prioritized": true, - "severities": { - "MAINTAINABILITY": "MEDIUM" - } - }, - { - "key": "python:S4823" - } - ], - "modifiedRules": [ - { - "key": "python:InequalityUsage", - "prioritized": true, - "severities": { - "MAINTAINABILITY": "HIGH" - } - }, - { - "key": "python:S3776", - "params": { - "threshold": "20" - } - } - ] + "branches": { + "comma,branch": { + "keepWhenInactive": true + }, + "release-2.x": { + "keepWhenInactive": true + }, + "develop": { + "newCodePeriod": "REFERENCE_BRANCH = main", + "keepWhenInactive": true + }, + "release-3.x": { + "newCodePeriod": "NUMBER_OF_DAYS = 80", + "keepWhenInactive": true + }, + "main": { + "newCodePeriod": "PREVIOUS_VERSION", + "isMain": true + } + }, + "webhooks": { + "Jenkins Team 1": { + "url": "https://jenkins.team1.server/sonar-webhook/" + } + }, + "sonar.coverage.jacoco.xmlReportPaths": "**/*jacoco*.xml" + }, + "project2": { + "name": "Project 2", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "develop": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "project3": { + "name": "Project 3", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "main": { + "isMain": true + }, + "develop": { + "keepWhenInactive": true + } + } + }, + "project4": { + "name": "Project 4", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "develop": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "proyecto5": { + "name": "Project 5", + "tags": "python", + "visibility": "private", + "permissions": { + "users": { + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "develop": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "web-backend": { + "name": "Web back-end", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user" + }, + "groups": { + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "web-frontend": { + "name": "Web front-end", + "tags": "3ds", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "https://owasp-juice.shop" + }, + { + "type": "scm", + "name": "scm", + "url": "https://github.com/juice-shop/juice-shop.git" + }, + { + "type": "issue", + "name": "issue", + "url": "https://github.com/juice-shop/juice-shop/issues" + } + ], + "permissions": { + "users": { + "admin": "admin, codeviewer, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + } + }, + "applications": { + "APPY": { + "name": "App Test 2", + "visibility": "public", + "branches": { + "main": { + "isMain": true + } + }, + "permissions": { + "groups": { + "sonar-administrators": "admin" + } + } + }, + "APP_TEST": { + "name": "Test App", + "tags": "africa", + "visibility": "private", + "branches": { + "main": { + "projects": { + "ai-code-fix": "main", + "BANKING-AFRICA-OPS": "main", + "dvpa": "main" + }, + "isMain": true + }, + "Other Branch": { + "projects": { + "ai-code-fix": "main", + "BANKING-AFRICA-OPS": "main", + "dvpa": "main" } }, - "isBuiltIn": true, - "isDefault": true + "BRANCH foo": { + "projects": { + "ai-code-fix": "main", + "BANKING-AFRICA-OPS": "main", + "dvpa": "main" + } + }, + "some-branch": { + "projects": { + "ai-code-fix": "main", + "BANKING-AFRICA-OPS": "main", + "dvpa": "main" + } + } + }, + "permissions": { + "groups": { + "sonar-administrators": "admin", + "sonar-users": "user" + } } }, - "rpg": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "App_with_no_perms": { + "name": "App with no perms", + "visibility": "private", + "branches": { + "main": { + "isMain": true + } + }, + "permissions": { + "users": { + "admin": "admin, user" + }, + "groups": {} } }, - "ruby": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "FE-BE": { + "name": "Front-end / Back-end", + "visibility": "private", + "description": "A web app with a separate front-end and back-end project", + "branches": { + "main": { + "projects": { + "web-backend": "main", + "web-frontend": "main" + }, + "isMain": true + } + }, + "permissions": { + "users": { + "admin": "admin, user" + }, + "groups": { + "developers": "user", + "project-admins": "admin, user", + "security-auditors": "user", + "sonar-administrators": "admin, user", + "tech-leads": "user" + } } }, - "rust": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "MON": { + "name": "My monorepo", + "visibility": "public", + "branches": { + "main": { + "projects": { + "project1": "main", + "project2": "main", + "project3": "main", + "project4": "main", + "proyecto5": "main" + }, + "isMain": true + } + }, + "permissions": { + "groups": { + "project-admins": "admin", + "sonar-administrators": "admin" + } } - }, - "scala": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + } + }, + "portfolios": { + "All": { + "name": "Company global portfolio", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" + } + }, + "portfolios": { + "Other_unclassified_projects": { + "name": "Other unclassified projects", + "projects": { + "rest": true, + "branch": "-DEFAULT_BRANCH-" + } + }, + "Banking": { + "byReference": true + }, + "CORP-INSURANCE": { + "byReference": true + } } }, - "secrets": { - "Sonar way": { - "children": { - "Corp Way": { - "addedRules": [ - { - "key": "secrets:Corp_secrets_should_not_leak" - }, - { - "key": "secrets:My_custom_secret_rule", - "severities": { - "SECURITY": "BLOCKER" - } + "Banking": { + "name": "Banking", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin, user", + "sonar-users": "user" + } + }, + "portfolios": { + "Investment_Banking": { + "name": "Investment Banking", + "portfolios": { + "Corporate_Mergers_and_Acquisitions": { + "name": "Corporate Mergers and Acquisitions", + "projects": { + "regexp": ".*MERgER.*", + "branch": "-DEFAULT_BRANCH-" } - ] + }, + "Corporate_loans": { + "name": "Corporate loans" + } + }, + "projects": { + "regexp": ".*-INVESTMENT-.*", + "branch": "develop" } }, - "isBuiltIn": true, - "isDefault": true - } - }, - "swift": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "terraform": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - }, - "text": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "Retail_Banking": { + "name": "Retail Banking", + "projects": { + "regexp": ".*-RETAIL-.*", + "branch": "-DEFAULT_BRANCH-" + } + }, + "Private_Banking": { + "byReference": true + } } }, - "ts": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "CEO_Strategic_Projects": { + "name": "CEO Strategic Projects", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin", + "sonar-users": "user" + } } }, - "tsql": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "CORP-INSURANCE": { + "name": "Insurance", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" + } + }, + "portfolios": { + "Other_Insurance": { + "name": "Other Insurance" + }, + "CORP-INSURANCE-LIFE": { + "byReference": true + }, + "CORP-INSURANCE-HEALTH": { + "byReference": true + } } }, - "vb": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "CORP-INSURANCE-HEALTH": { + "name": "Health Insurance", + "visibility": "private", + "permissions": { + "users": { + "michal": "user", + "olivier": "admin", + "syncer": "user" + }, + "groups": { + "sonar-administrators": "admin, user", + "sonar-users": "user", + "z comma , group": "user" + } + }, + "projects": { + "regexp": ".*HEALTH.*", + "branch": "-DEFAULT_BRANCH-" } }, - "vbnet": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "CORP-INSURANCE-LIFE": { + "name": "Life Insurance", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" + } + }, + "projects": { + "manual": { + "INSURANCE-PET": "-DEFAULT_BRANCH-", + "INSURANCE-LIFE": "-DEFAULT_BRANCH-" + } } }, - "web": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "DEMOS": { + "name": "Demo projects", + "visibility": "public", + "permissions": { + "groups": { + "sonar-users": "admin" + } + }, + "projects": { + "tags": "demo", + "branch": "-DEFAULT_BRANCH-" } }, - "xml": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true + "PORTFOLIO-OLIVIER": { + "name": "Olivier's projects", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" + } + }, + "projects": { + "regexp": ".*okorach.*", + "branch": "-DEFAULT_BRANCH-" } }, - "yaml": { - "Sonar way": { - "isBuiltIn": true, - "isDefault": true - } - } - }, - "rules": { - "extended": { - "csharpsquid:S3884": { - "tags": "ubs-critical" - }, - "java:S115": { - "description": "En Francais: Les constantes doivent suivre des conventions de nommage" - }, - "java:S1451": { - "description": "Avec la meme version en francais" - }, - "java:S1698": { - "description": "Traduction francaise de la regle:\nIl ne faut pas comparer les objets avec == si la methode equals n'a pas ete surchargee" - }, - "python:S1721": { - "description": "Actually in the context of an ``if``, parens are necessary:\n``if value in (\"foo\", \"bar\")`` for instance", - "tags": "improve-description" + "PORTFOLIO-PYTHON": { + "name": "Python Projects", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" + } }, - "python:S2737": { - "tags": "best-practice" + "projects": { + "tags": "python", + "branch": "-DEFAULT_BRANCH-" } }, - "instantiated": { - "java:Don_t_be_rude": { - "isTemplate": false, - "language": "java", - "params": { - "regularExpression": "(fuck|shit|merde)" - }, - "severities": { - "MAINTAINABILITY": "MEDIUM", - "SECURITY": "LOW" + "PORTFOLIO_ALL": { + "name": "All projects", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin, user", + "sonar-users": "user" } }, - "jcl:Track_usage_of_rogue_programs": { - "isTemplate": false, - "language": "jcl", - "params": { - "programName": "ROGUEPROG", - "replacementProgramName": "OKPROG" - }, - "severities": { - "MAINTAINABILITY": "LOW", - "RELIABILITY": "MEDIUM", - "SECURITY": "HIGH" + "projects": { + "rest": true, + "branch": "-DEFAULT_BRANCH-" + } + }, + "PORTFOLIO_APPS": { + "name": "Portfolio of Apps", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin", + "sonar-users": "user" } }, - "python:Do_not_use_offending_words_for_symbols_or_comments": { - "isTemplate": false, - "language": "py", - "params": { - "message": "Don't write fuck or shit in code", - "regularExpression": "(fuck|shit)" - }, - "severities": { - "MAINTAINABILITY": "MEDIUM" + "applications": { + "APPY": "-DEFAULT_BRANCH-", + "APP_TEST": "-DEFAULT_BRANCH-, Other Branch" + } + }, + "PORTFOLIO_MULTI_BRANCHES": { + "name": "Portfolios multiple branches", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin", + "sonar-users": "user" } }, - "python:Do_not_use_offensive_words_in_comments": { - "isTemplate": false, - "language": "py", - "params": { - "message": "Don't use shit or fuck in comments", - "regularExpression": "(shit|fuck)" - }, - "severities": { - "MAINTAINABILITY": "MEDIUM" + "projects": { + "manual": { + "BANKING-INVESTMENT-EQUITY": "-DEFAULT_BRANCH-", + "BANKING-INVESTMENT-MERGER": "-DEFAULT_BRANCH-", + "BANKING-PORTAL": [ + "comma,branch", + "main", + "release-3.2" + ] + } + } + }, + "PORT_FAV_PROJECTS": { + "name": "My favorite projects", + "visibility": "private", + "permissions": { + "groups": { + "sonar-administrators": "admin", + "sonar-users": "user" } }, - "secrets:Corp_secrets_should_not_leak": { - "isTemplate": false, - "language": "secrets", - "params": { - "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"" - }, - "severities": { - "SECURITY": "BLOCKER" + "projects": { + "manual": { + "code-variants": "-DEFAULT_BRANCH-", + "demo-rules": "-DEFAULT_BRANCH-", + "ai-code-fix": "-DEFAULT_BRANCH-", + "mute-in-ide": "-DEFAULT_BRANCH-", + "creedengo-issues": "-DEFAULT_BRANCH-", + "demo:autoconfig": "-DEFAULT_BRANCH-", + "demo:coverage": "-DEFAULT_BRANCH-" + } + } + }, + "Private_Banking": { + "name": "Private Banking", + "visibility": "public", + "permissions": { + "groups": { + "sonar-administrators": "admin" } }, - "secrets:My_custom_secret_rule": { - "isTemplate": false, - "language": "secrets", - "params": { - "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"\n context:\n patternAround:\n pattern: \"\"\n maxLineDistance: 10\n maxCharDistance: 500" - }, - "severities": { - "SECURITY": "HIGH" + "projects": { + "tags": "private-banking", + "branch": "-DEFAULT_BRANCH-" + } + }, + "Rik_all_projects": { + "name": "Rik all projects", + "visibility": "public", + "permissions": { + "groups": { + "sonar-users": "admin" } + }, + "projects": { + "regexp": ".*", + "branch": "-DEFAULT_BRANCH-" } } }, "users": { "admin": { + "name": "Administrator", "email": "admin@acme.com", - "groups": "ci-tools, security-auditors, sonar-administrators, tech-leads", "local": true, - "name": "Administrator", - "scmAccounts": "admin-acme, administrator-acme" + "scmAccounts": "admin-acme, administrator-acme", + "groups": "ci-tools, security-auditors, sonar-administrators, tech-leads" }, "ado": { - "groups": "ci-tools", + "name": "Azure DevOps Service Account", "local": true, - "name": "Azure DevOps Service Account" + "groups": "ci-tools" }, "bbTEMPaa": { - "local": true, - "name": "User name bbTEMPaa" + "name": "User name bbTEMPaa", + "local": true }, "james": { - "groups": "sonar-administrators", + "name": "James Amable", "local": true, - "name": "James Amable" + "groups": "sonar-administrators" }, "michal": { - "groups": "language-experts, tech-leads", + "name": "michal", "local": true, - "name": "michal" + "groups": "language-experts, tech-leads" }, "olivier": { - "groups": "project-admins, tech-leads", + "name": "olivier", "local": true, - "name": "olivier" + "groups": "project-admins, tech-leads" }, "olivier-k31581": { + "name": "Olivier K", "email": "olivier.korach@sonarsource.com", - "groups": "language-experts, project-admins, quality-managers", - "name": "Olivier K" + "groups": "language-experts, project-admins, quality-managers" }, "olivier-korach22656": { + "name": "Olivier Korach", "email": "olivier.korach@gmail.com", - "groups": "gl-admins, gl-admins/gl-devs", - "name": "Olivier Korach" + "groups": "gl-admins, gl-admins/gl-devs" }, "syncer": { - "groups": "developers, language-experts, quality-managers, security-auditors, sonar-administrators, tech-leads", + "name": "syncer", "local": true, - "name": "syncer" + "groups": "developers, language-experts, quality-managers, security-auditors, sonar-administrators, tech-leads" + } + }, + "groups": { + "ci-tools": "Service accounts for CI tools", + "developers": "Developers", + "gl-admins": "", + "gl-admins/gl-devs": "", + "language-experts": "Language experts in charge of defining the company governance in terms of Quality Profiles (rulesets enforced in the company)", + "project-admins": "Project administrators in charge of project configuration", + "quality-managers": "Quality Managers in charge of defining company governance in terms of quality gates", + "security-auditors": "Security Auditors in charge of reviewing security issues", + "sonar-administrators": "SonarQube administrators", + "tech-leads": "Senior developers in charge of reviewing issues", + "z comma , group": "" + }, + "rules": { + "instantiated": { + "jcl:Track_usage_of_rogue_programs": { + "severity": "INFO", + "impacts": { + "MAINTAINABILITY": "LOW", + "SECURITY": "HIGH", + "RELIABILITY": "MEDIUM" + }, + "params": { + "programName": "ROGUEPROG", + "replacementProgramName": "OKPROG" + }, + "language": "jcl", + "templateKey": "jcl:S3688" + }, + "java:Don_t_be_rude": { + "severity": "MAJOR", + "impacts": { + "SECURITY": "MEDIUM", + "MAINTAINABILITY": "MEDIUM" + }, + "params": { + "message": "Hey don't be rude!", + "regularExpression": "(fuck|shit|merde)" + }, + "language": "java", + "templateKey": "java:S124" + }, + "python:Do_not_use_offensive_words_in_comments": { + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, + "params": { + "message": "Don't use shit or fuck in comments", + "regularExpression": "(shit|fuck)" + }, + "language": "py", + "templateKey": "python:CommentRegularExpression" + }, + "python:Do_not_use_offending_words_for_symbols_or_comments": { + "severity": "MAJOR", + "impacts": { + "MAINTAINABILITY": "MEDIUM" + }, + "params": { + "message": "Don't write fuck or shit in code", + "regularExpression": "(fuck|shit)" + }, + "language": "py", + "templateKey": "python:CommentRegularExpression" + }, + "secrets:Siemens_custom_keys_should_not_leak": { + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + }, + "params": { + "detectionSpecification": "SIEMENS_\\d\\d\\d\\d\\d\\d\\d\\d" + }, + "language": "secrets", + "templateKey": "secrets:S6784" + }, + "secrets:Corp_secrets_should_not_leak": { + "severity": "BLOCKER", + "impacts": { + "SECURITY": "BLOCKER" + }, + "params": { + "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"" + }, + "language": "secrets", + "templateKey": "secrets:S6784" + }, + "secrets:My_custom_secret_rule": { + "severity": "BLOCKER", + "impacts": { + "SECURITY": "HIGH" + }, + "params": { + "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"\n context:\n patternAround:\n pattern: \"\"\n maxLineDistance: 10\n maxCharDistance: 500" + }, + "language": "secrets", + "templateKey": "secrets:S6784" + } + }, + "extended": { + "csharpsquid:S3884": { + "tags": "ubs-critical" + }, + "java:S1698": { + "description": "Traduction francaise de la regle:\nIl ne faut pas comparer les objets avec == si la methode equals n'a pas ete surchargee" + }, + "java:S115": { + "description": "En Francais: Les constantes doivent suivre des conventions de nommage" + }, + "java:S1451": { + "description": "Avec la meme version en francais" + }, + "python:S2737": { + "tags": "best-practice" + }, + "python:S1721": { + "tags": "improve-description", + "description": "Actually in the context of an ``if``, parens are necessary:\n``if value in (\"foo\", \"bar\")`` for instance" + } } } } diff --git a/test/unit/test_config.py b/test/unit/test_config.py index edaf8bf10..37538f048 100644 --- a/test/unit/test_config.py +++ b/test/unit/test_config.py @@ -27,9 +27,10 @@ import utilities as tutil from sonar import errcodes as e -from sonar import portfolios, applications +from sonar import portfolios, applications, projects from sonar import logging import sonar.util.constants as c +from sonar import utilities as util import cli.options as opt from cli import config @@ -205,3 +206,22 @@ def test_config_import_apps() -> None: app_list = applications.get_list(tutil.TEST_SQ) assert len(app_list) == len(json_config) assert sorted(app_list.keys()) == sorted(json_config.keys()) + + +def test_config_import_projects() -> None: + """TEsts that the import of projects config works""" + config_file = f"{tutil.FILES_ROOT}/config.json" + json_config = tutil.read_json(config_file)["projects"] + + # delete all projects in test except the testsync one + for p in projects.get_list(tutil.TEST_SQ).values(): + if p.key != "TESTSYNC": + p.delete() + # Import config + cmd = f"{CMD} {tutil.SQS_TEST_OPTS} --{opt.IMPORT} --{opt.REPORT_FILE} {config_file} --{opt.WHAT} {opt.WHAT_PROJECTS}" + assert tutil.run_cmd(config.main, cmd) == e.OK + + # Compare projects + project_list = projects.get_list(tutil.TEST_SQ) + assert len(project_list) == len(json_config) + assert sorted(project_list.keys()) == sorted(json_config.keys())