diff --git a/sonar/branches.py b/sonar/branches.py
index 1bb68c6d..9d7d531e 100644
--- a/sonar/branches.py
+++ b/sonar/branches.py
@@ -250,6 +250,11 @@ def set_keep_when_inactive(self, keep: bool) -> bool:
:return: Whether the operation was successful
"""
log.info("Setting %s keep when inactive to %s", self, keep)
+ if self.is_main():
+ if not keep:
+ log.warning("%s is main branch, can't be purgeable, skipping...", str(self))
+ raise exceptions.UnsupportedOperation(f"{str(self)} is the main branch, can't be purgeable")
+ return True
ok = self.post("project_branches/set_automatic_deletion_protection", params=self.api_params() | {"value": str(keep).lower()}).ok
if ok:
self._keep_when_inactive = keep
@@ -285,7 +290,10 @@ def import_config(self, config_data: types.ObjectJsonRepr) -> None:
log.debug("Importing %s with %s", str(self), config_data)
if config_data.get("isMain", False):
self.set_as_main()
- self.set_keep_when_inactive(config_data.get("keepWhenInactive", False))
+ try:
+ self.set_keep_when_inactive(config_data.get("keepWhenInactive", False))
+ except exceptions.UnsupportedOperation as e:
+ log.warning(e.message)
if settings.NEW_CODE_PERIOD in config_data:
new_code = settings.string_to_new_code(config_data[settings.NEW_CODE_PERIOD])
param = None
diff --git a/test/files/config-for-audit.json b/test/files/config-for-audit.json
new file mode 100644
index 00000000..159a2a3f
--- /dev/null
+++ b/test/files/config-for-audit.json
@@ -0,0 +1,3990 @@
+{
+ "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"
+ },
+ "checkstyle": {
+ "version": "10.17.0",
+ "name": "Checkstyle"
+ },
+ "dependencycheck": {
+ "version": "5.0.0",
+ "name": "Dependency-Check"
+ }
+ }
+ },
+ "globalSettings": {
+ "generalSettings": {
+ "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",
+ "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.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",
+ "main",
+ "master",
+ "release-.*",
+ "trunk"
+ ],
+ "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.multi-quality-mode.enabled": true,
+ "sonar.ai.suggestions.enabled": "ENABLED_FOR_ALL_PROJECTS",
+ "webhooks": {
+ "Jenkins": {
+ "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"
+ },
+ "apex": {
+ "sonar.apex.file.suffixes": ".cls, .trigger"
+ },
+ "azureresourcemanager": {
+ "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.file.identifier": "AWSTemplateFormatVersion"
+ },
+ "cobol": {
+ "sonar.cobol.adaprep.activation": "false",
+ "sonar.cobol.byteBasedColumnCount": "false",
+ "sonar.cobol.dialect": "ibm-enterprise-cobol",
+ "sonar.cobol.exec.recoveryMode": "true",
+ "sonar.cpd.cobol.ignoreLiteral": "true",
+ "sonar.cobol.sourceFormat": "fixed",
+ "sonar.cobol.tab.width": "8"
+ },
+ "css": {
+ "sonar.css.file.suffixes": ".css, .less, .scss"
+ },
+ "dart": {
+ "sonar.dart.file.suffixes": ".dart"
+ },
+ "docker": {
+ "sonar.docker.activate": "true",
+ "sonar.docker.file.patterns": "*.dockerfile, Dockerfile, *.Dockerfile"
+ },
+ "vbnet": {
+ "sonar.vbnet.roslyn.ignoreIssues": "false",
+ "sonar.vbnet.analyzeGeneratedCode": "false",
+ "sonar.vbnet.file.suffixes": ".vb",
+ "sonar.vbnet.ignoreHeaderComments": "true"
+ },
+ "terraform": {
+ "sonar.terraform.activate": "true",
+ "sonar.terraform.file.suffixes": ".tf"
+ },
+ "kotlin": {
+ "sonar.kotlin.file.suffixes": ".kt"
+ },
+ "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.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.maxFileSize": "1000",
+ "sonar.jasmin.internal.disabled": "false"
+ },
+ "php": {
+ "sonar.php.file.suffixes": "inc, php, php3, php4, php5, phtml",
+ "sonar.php.exclusions": "**/vendor/**",
+ "sonar.php.frameworkDetection": "true"
+ },
+ "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"
+ },
+ "jcl": {
+ "sonar.jcl.file.suffixes": ".jcl"
+ },
+ "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"
+ },
+ "plsql": {
+ "sonar.plsql.file.suffixes": "pkb, pks, sql",
+ "sonar.plsql.ignoreHeaderComments": "false"
+ },
+ "ipynb": {
+ "sonar.ipynb.file.suffixes": "ipynb"
+ },
+ "rpg": {
+ "sonar.rpg.file.suffixes": ".RPG, .RPGLE, .SQLRPGLE, .rpg, .rpgle, .sqlrpgle",
+ "sonar.rpg.leftMarginWidth": "12"
+ },
+ "rust": {
+ "sonar.rust.clippy.enabled": "true",
+ "sonar.rust.clippy.offline": "false",
+ "sonar.rust.file.suffixes": ".rs"
+ },
+ "text": {
+ "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"
+ },
+ "vb": {
+ "sonar.vb.file.suffixes": ".BAS, .CLS, .CTL, .FRM, .bas, .cls, .ctl, .frm",
+ "sonar.vb.ignoreHeaderComments": "true"
+ },
+ "xml": {
+ "sonar.xml.file.suffixes": ".xml, .xsd, .xsl"
+ },
+ "yaml": {
+ "sonar.yaml.activate": "false",
+ "sonar.yaml.file.suffixes": ".yaml, .yml"
+ }
+ },
+ "tests": {
+ "sonar.coverage.jacoco.xmlReportPaths": "**/jacoco*.xml",
+ "sonar.junit.reportPaths": "**/junit*.xml"
+ },
+ "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": {
+ "description": "This permission template will be used as default when no other permission configuration is available",
+ "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"
+ }
+ },
+ "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",
+ "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"
+ }
+ },
+ "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",
+ "permissions": {
+ "groups": {
+ "ci-tools": "scan",
+ "developers": "codeviewer, user",
+ "quality-managers": "issueadmin, securityhotspotadmin",
+ "security-auditors": "issueadmin, securityhotspotadmin",
+ "tech-leads": "codeviewer, issueadmin, securityhotspotadmin, user"
+ }
+ },
+ "pattern": "my_favorite_project"
+ },
+ "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",
+ "permissions": {
+ "users": {
+ "admin": "admin"
+ },
+ "groups": {
+ "Anyone": "user",
+ "ci-tools": "scan",
+ "developers": "codeviewer, user"
+ }
+ },
+ "pattern": "BAD9.*"
+ },
+ "9. Bad template - Permissions to users": {
+ "permissions": {
+ "users": {
+ "admin": "admin, scan",
+ "james": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user",
+ "michal": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user",
+ "olivier": "codeviewer, user"
+ },
+ "groups": {
+ "developers": "codeviewer, user",
+ "security-auditors": "issueadmin, securityhotspotadmin",
+ "tech-leads": "codeviewer, issueadmin, user"
+ }
+ },
+ "pattern": "BARFOO.*"
+ },
+ "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.*"
+ },
+ "9. Bad Template - wildcard instead of regexp": {
+ "permissions": {
+ "groups": {
+ "ci-tools": "scan",
+ "developers": "codeviewer, user",
+ "sonar-administrators": "admin",
+ "tech-leads": "codeviewer, issueadmin, securityhotspotadmin, user"
+ }
+ },
+ "pattern": "BANKING-INVEST-*"
+ }
+ }
+ },
+ "qualityGates": {
+ "Default QG": {
+ "isDefault": true,
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 100%",
+ "new_violations >= 0"
+ ]
+ },
+ "My Sonar way": {
+ "conditions": [
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 100%",
+ "new_violations >= 0"
+ ]
+ },
+ "QG duplicate - BAD": {
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 100%",
+ "new_violations >= 0"
+ ]
+ },
+ "QG duplicate 2 - BAD": {
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 100%",
+ "new_violations >= 0"
+ ]
+ },
+ "QG with no conditions - BAD": {},
+ "QG with permissions to too many users - BAD": {
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 95%",
+ "new_violations >= 0"
+ ],
+ "permissions": {
+ "users": "james, michal, olivier"
+ }
+ },
+ "QG with too high cov - BAD": {
+ "conditions": [
+ "new_coverage <= 95%",
+ "new_violations >= 0"
+ ]
+ },
+ "QG with too many admins - BAD": {
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 92%",
+ "new_violations >= 0"
+ ],
+ "permissions": {
+ "users": "james, michal, olivier-k31581",
+ "groups": "developers, quality-managers, tech-leads"
+ }
+ },
+ "QG with wrong criteria on new code - BAD": {
+ "conditions": [
+ "new_coverage <= 0%",
+ "new_duplicated_lines_density >= 50%",
+ "new_security_hotspots_reviewed <= 10%",
+ "new_violations >= 17"
+ ]
+ },
+ "QG with wrong criteria on overall code - BAD": {
+ "conditions": [
+ "complexity >= 1000",
+ "coverage <= 10%",
+ "false_positive_issues >= 50",
+ "new_violations >= 0",
+ "software_quality_blocker_issues >= 100"
+ ]
+ },
+ "QG without projects - BAD": {
+ "conditions": [
+ "new_coverage <= 80%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 80%",
+ "new_violations >= 0"
+ ]
+ },
+ "QP with admin permission to sonar-users - BAD": {
+ "conditions": [
+ "new_coverage <= 43%",
+ "new_duplicated_lines_density >= 3%",
+ "new_security_hotspots_reviewed <= 100%",
+ "new_violations >= 0"
+ ],
+ "permissions": {
+ "groups": "sonar-users"
+ }
+ },
+ "Sonar way": {
+ "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"
+ ]
+ }
+ },
+ "qualityProfiles": {
+ "abap": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "ansible": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true,
+ "children": {
+ "Test": {}
+ }
+ }
+ },
+ "apex": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "azureresourcemanager": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "c": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "cloudformation": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "cobol": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "cpp": {
+ "Mission critical": {
+ "isBuiltIn": true
+ },
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "cs": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "css": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "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"
+ },
+ {
+ "key": "dart:S1854"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "docker": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "flex": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "githubactions": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "go": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "ipynb": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "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",
+ "params": {
+ "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"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "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",
+ "params": {
+ "programName": "ROGUEPROG",
+ "replacementProgramName": "OKPROG"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "js": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true,
+ "children": {
+ "security-max": {
+ "addedRules": [
+ {
+ "key": "javascript:S2817"
+ },
+ {
+ "key": "javascript:S1442"
+ },
+ {
+ "key": "javascript:S1525"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "json": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "jsp": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "kotlin": {
+ "No rules": {
+ "rules": [
+ {
+ "key": "kotlin:S3329",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ }
+ ]
+ },
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "kubernetes": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "neutral": {
+ "Neutral": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "objc": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "php": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "pli": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "plsql": {
+ "Sonar way": {
+ "isDefault": true,
+ "isBuiltIn": true
+ }
+ },
+ "py": {
+ "Prioritized": {
+ "rules": [
+ {
+ "key": "python:BackticksUsage",
+ "severity": "BLOCKER",
+ "impacts": {
+ "MAINTAINABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:ExecStatementUsage",
+ "severity": "BLOCKER",
+ "impacts": {
+ "MAINTAINABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:InequalityUsage",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:PreIncrementDecrement",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "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",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1066",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S107",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ },
+ "params": {
+ "max": "13"
+ }
+ },
+ {
+ "key": "python:S108",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1110",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S112",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1134",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1135",
+ "severity": "INFO",
+ "impacts": {
+ "MAINTAINABILITY": "INFO"
+ }
+ },
+ {
+ "key": "python:S1143",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "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",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1186",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S1192",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ },
+ "params": {
+ "threshold": "3",
+ "exclusionRegex": ""
+ }
+ },
+ {
+ "key": "python:S1226",
+ "severity": "MINOR",
+ "impacts": {
+ "RELIABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S1244",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S125",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ },
+ "params": {
+ "exception": "(fmt|py\\w+):.*"
+ }
+ },
+ {
+ "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",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1542",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ },
+ "params": {
+ "format": "^[a-z_][a-z0-9_]*$"
+ }
+ },
+ {
+ "key": "python:S1607",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1656",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1700",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1716",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S1751",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1763",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1764",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1845",
+ "severity": "BLOCKER",
+ "impacts": {
+ "MAINTAINABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S1854",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1862",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1871",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S1940",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "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",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S2092",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S2115",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2159",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2190",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2201",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S2208",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S2245",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S2257",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S2275",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2612",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "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"
+ }
+ },
+ {
+ "key": "python:S2734",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2737",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S2755",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2757",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S2761",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S2772",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S2823",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S2836",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S2876",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S3329",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S3330",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S3358",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3403",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S3457",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3516",
+ "severity": "BLOCKER",
+ "impacts": {
+ "MAINTAINABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S3626",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S3699",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3752",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S3776",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ },
+ "params": {
+ "threshold": "15"
+ }
+ },
+ {
+ "key": "python:S3827",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S3862",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S3923",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3981",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3984",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S3985",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S4143",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S4144",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S4423",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S4426",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S4433",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S4487",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ },
+ "params": {
+ "enableSingleUnderscoreIssues": "false"
+ }
+ },
+ {
+ "key": "python:S4502",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S4507",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S4790",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S4828",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S4830",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5042",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S5122",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S5247",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S5332",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S5344",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5361",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5443",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S5445",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5527",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5542",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5547",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5549",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5603",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5607",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5632",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5642",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5644",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5655",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5659",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5685",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5704",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5706",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5707",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5708",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5709",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5712",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5713",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5714",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5717",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5719",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5720",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ },
+ "params": {
+ "ignoredDecorators": "abstractmethod"
+ }
+ },
+ {
+ "key": "python:S5722",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5724",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5727",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5747",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5754",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5756",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5780",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5781",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5795",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5796",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5797",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5799",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5806",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5807",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5828",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5842",
+ "severity": "MINOR",
+ "impacts": {
+ "RELIABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5843",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ },
+ "params": {
+ "maxComplexity": "20"
+ }
+ },
+ {
+ "key": "python:S5845",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5850",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5852",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S5855",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5857",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5860",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5864",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5868",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5869",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5886",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5890",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5899",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5905",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S5906",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5914",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S5915",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5918",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S5994",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S5996",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6001",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6002",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6019",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6035",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6252",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "MINOR"
+ }
+ },
+ {
+ "key": "python:S6265",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6270",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6275",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6281",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S6302",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6303",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6304",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6308",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6317",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6319",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6321",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6323",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6326",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6327",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6328",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6329",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6330",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6331",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6332",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6333",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6353",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6377",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6395",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6396",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "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",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6463",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "python:S6468",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6537",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6546",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6552",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6553",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6556",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6559",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6560",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6659",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6660",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6662",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6663",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6709",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM",
+ "SECURITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6711",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6714",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6725",
+ "severity": "BLOCKER",
+ "impacts": {
+ "MAINTAINABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6727",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "LOW",
+ "SECURITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6729",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6730",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6734",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "MEDIUM",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6735",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6741",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6742",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6779",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6781",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S6785",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6786",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6792",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6794",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6795",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6796",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6799",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6882",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "LOW",
+ "RELIABILITY": "MEDIUM",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6883",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "MEDIUM",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6887",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6890",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "MEDIUM",
+ "SECURITY": "LOW",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6894",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6900",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "MEDIUM",
+ "SECURITY": "LOW",
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6903",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6908",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6911",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6918",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6919",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6925",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6928",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6929",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6969",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6971",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6972",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6973",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6974",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6978",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6979",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6982",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "python:S6983",
+ "severity": "MINOR",
+ "impacts": {
+ "RELIABILITY": "LOW"
+ }
+ },
+ {
+ "key": "python:S6984",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "python:S6985",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "CRITICAL"
+ }
+ },
+ {
+ "key": "python:S905",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ },
+ "params": {
+ "reportOnStrings": "false",
+ "ignoredOperators": "<<,>>,|"
+ }
+ },
+ {
+ "key": "python:S930",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "python:S935",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonbugs:S2259",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonbugs:S2583",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonbugs:S2589",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonbugs:S3518",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonbugs:S5633",
+ "severity": "BLOCKER",
+ "impacts": {
+ "RELIABILITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonbugs:S6417",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonbugs:S6464",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonbugs:S6465",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonbugs:S6466",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonbugs:S6886",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonbugs:S6899",
+ "severity": "CRITICAL",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7181",
+ "severity": "CRITICAL",
+ "impacts": {
+ "MAINTAINABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7182",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7187",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7189",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7191",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7192",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7193",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7195",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7196",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "LOW",
+ "RELIABILITY": "MEDIUM"
+ },
+ "params": {
+ "nestedCallThreshold": "5",
+ "comparisonThreshold": "5"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7468",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7469",
+ "severity": "MAJOR",
+ "impacts": {
+ "RELIABILITY": "HIGH",
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7470",
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonenterprise:S7471",
+ "severity": "MINOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "RELIABILITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonsecurity:S2076",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S2078",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S2083",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S2091",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S2631",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonsecurity:S3649",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5131",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5135",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5144",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5145",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "LOW"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5146",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5147",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5334",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S5496",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6287",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6350",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MAJOR"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6639",
+ "severity": "MAJOR",
+ "impacts": {
+ "SECURITY": "MEDIUM"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6680",
+ "severity": "CRITICAL",
+ "impacts": {
+ "SECURITY": "HIGH"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6776",
+ "severity": "MINOR",
+ "impacts": {
+ "SECURITY": "LOW"
+ }
+ },
+ {
+ "key": "pythonsecurity:S6839",
+ "severity": "BLOCKER",
+ "impacts": {
+ "SECURITY": "BLOCKER"
+ }
+ },
+ {
+ "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": {
+ "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",
+ "isRegularExpression": "true"
+ }
+ },
+ {
+ "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"
+ },
+ {
+ "key": "python:S4823"
+ }
+ ],
+ "modifiedRules": [
+ {
+ "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",
+ "params": {
+ "detectionSpecification": "matching:\n pattern: \"\\\\bCORP_SECRET_\\\\d{10}\\\\b\"\n context:\n patternAround:\n pattern: \"\"\n maxLineDistance: 10\n maxCharDistance: 500"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "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": {
+ "admin": "admin",
+ "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"
+ }
+ }
+ },
+ "TESTSYNC": {
+ "name": "TESTSYNC",
+ "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
+ },
+ "release-3.x": {
+ "keepWhenInactive": true
+ }
+ }
+ }
+ },
+ "applications": {
+ "APPY": {
+ "name": "App Test 2",
+ "visibility": "public",
+ "branches": {
+ "main": {
+ "isMain": true
+ }
+ },
+ "permissions": {
+ "users": {
+ "admin": "admin"
+ },
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ }
+ },
+ "APP_TEST": {
+ "name": "Test App",
+ "visibility": "private",
+ "branches": {
+ "main": {
+ "isMain": true
+ }
+ },
+ "permissions": {
+ "users": {
+ "admin": "admin"
+ },
+ "groups": {
+ "sonar-administrators": "admin",
+ "sonar-users": "user"
+ }
+ }
+ },
+ "App_with_no_perms": {
+ "name": "App with no perms",
+ "visibility": "private",
+ "branches": {
+ "main": {
+ "isMain": true
+ }
+ },
+ "permissions": {
+ "users": {
+ "admin": "admin, user"
+ },
+ "groups": {}
+ }
+ },
+ "FE-BE": {
+ "name": "Front-end / Back-end",
+ "visibility": "private",
+ "branches": {
+ "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"
+ }
+ }
+ },
+ "MON": {
+ "name": "My monorepo",
+ "visibility": "public",
+ "branches": {
+ "main": {
+ "isMain": true
+ }
+ },
+ "permissions": {
+ "users": {
+ "admin": "admin"
+ },
+ "groups": {
+ "project-admins": "admin",
+ "sonar-administrators": "admin"
+ }
+ }
+ }
+ },
+ "portfolios": {
+ "All": {
+ "name": "Company global portfolio",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ }
+ },
+ "Banking": {
+ "name": "Banking",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin, user",
+ "sonar-users": "user"
+ }
+ },
+ "portfolios": {
+ "Retail_Banking": {
+ "name": "Retail Banking",
+ "projects": {
+ "regexp": ".*-RETAIL-.*",
+ "branch": "-DEFAULT_BRANCH-"
+ }
+ },
+ "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"
+ }
+ },
+ "Private_Banking": {
+ "byReference": true
+ }
+ }
+ },
+ "CEO_Strategic_Projects": {
+ "name": "CEO Strategic Projects",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin",
+ "sonar-users": "user"
+ }
+ }
+ },
+ "CORP-INSURANCE": {
+ "name": "Insurance",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ },
+ "portfolios": {
+ "Other_Insurance": {
+ "name": "Other Insurance"
+ },
+ "CORP-INSURANCE-HEALTH": {
+ "byReference": true
+ },
+ "CORP-INSURANCE-LIFE": {
+ "byReference": 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-"
+ }
+ },
+ "CORP-INSURANCE-LIFE": {
+ "name": "Life Insurance",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ },
+ "projects": {}
+ },
+ "DEMOS": {
+ "name": "Demo projects",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-users": "admin"
+ }
+ },
+ "projects": {
+ "tags": "demo",
+ "branch": "-DEFAULT_BRANCH-"
+ }
+ },
+ "PORTFOLIO-OLIVIER": {
+ "name": "Olivier's projects",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ },
+ "projects": {
+ "regexp": ".*okorach.*",
+ "branch": "-DEFAULT_BRANCH-"
+ }
+ },
+ "PORTFOLIO-PYTHON": {
+ "name": "Python Projects",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ },
+ "projects": {
+ "tags": "python",
+ "branch": "-DEFAULT_BRANCH-"
+ }
+ },
+ "PORTFOLIO_ALL": {
+ "name": "All projects",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin, user",
+ "sonar-users": "user"
+ }
+ },
+ "projects": {
+ "rest": true,
+ "branch": "-DEFAULT_BRANCH-"
+ }
+ },
+ "PORTFOLIO_APPS": {
+ "name": "Portfolio of Apps",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin",
+ "sonar-users": "user"
+ }
+ },
+ "applications": {
+ "APP_TEST": "-DEFAULT_BRANCH-",
+ "APPY": "-DEFAULT_BRANCH-"
+ }
+ },
+ "PORTFOLIO_MULTI_BRANCHES": {
+ "name": "Portfolios multiple branches",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin",
+ "sonar-users": "user"
+ }
+ },
+ "projects": {}
+ },
+ "PORT_FAV_PROJECTS": {
+ "name": "My favorite projects",
+ "visibility": "private",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin",
+ "sonar-users": "user"
+ }
+ },
+ "projects": {}
+ },
+ "Private_Banking": {
+ "name": "Private Banking",
+ "visibility": "public",
+ "permissions": {
+ "groups": {
+ "sonar-administrators": "admin"
+ }
+ },
+ "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",
+ "local": true,
+ "scmAccounts": "admin-acme, administrator-acme",
+ "groups": "ci-tools, security-auditors, sonar-administrators, tech-leads"
+ },
+ "ado": {
+ "name": "Azure DevOps Service Account",
+ "local": true,
+ "groups": "ci-tools"
+ },
+ "bbTEMPaa": {
+ "name": "User name bbTEMPaa",
+ "local": true
+ },
+ "james": {
+ "name": "James Amable",
+ "local": true,
+ "groups": "sonar-administrators"
+ },
+ "michal": {
+ "name": "michal",
+ "local": true,
+ "groups": "language-experts, tech-leads"
+ },
+ "olivier": {
+ "name": "olivier",
+ "local": true,
+ "groups": "project-admins, tech-leads"
+ },
+ "olivier-k31581": {
+ "name": "Olivier K",
+ "email": "olivier.korach@sonarsource.com",
+ "groups": "language-experts, project-admins, quality-managers"
+ },
+ "olivier-korach22656": {
+ "name": "Olivier Korach",
+ "email": "olivier.korach@gmail.com",
+ "groups": "gl-admins, gl-admins/gl-devs"
+ },
+ "syncer": {
+ "name": "syncer",
+ "local": true,
+ "groups": "developers, language-experts, quality-managers, security-auditors, sonar-administrators, tech-leads"
+ }
+ },
+ "groups": {
+ "Z. Bad group - No members": "A group with no members. This makes no sense",
+ "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",
+ "RELIABILITY": "MEDIUM",
+ "SECURITY": "HIGH"
+ },
+ "params": {
+ "programName": "ROGUEPROG",
+ "replacementProgramName": "OKPROG"
+ },
+ "language": "jcl",
+ "templateKey": "jcl:S3688"
+ },
+ "java:Don_t_be_rude": {
+ "severity": "MAJOR",
+ "impacts": {
+ "MAINTAINABILITY": "MEDIUM",
+ "SECURITY": "LOW"
+ },
+ "params": {
+ "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: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"
+ },
+ "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"
+ }
+ },
+ "extended": {
+ "csharpsquid:S3884": {
+ "tags": "ubs-critical"
+ },
+ "java:S1451": {
+ "description": "Avec la meme version en francais"
+ },
+ "java:S115": {
+ "description": "En Francais: Les constantes doivent suivre des conventions de nommage"
+ },
+ "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": {
+ "tags": "improve-description",
+ "description": "Actually in the context of an ``if``, parens are necessary:\n``if value in (\"foo\", \"bar\")`` for instance"
+ },
+ "python:S2737": {
+ "tags": "best-practice"
+ }
+ }
+ }
+}