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" + } + } + } +}