diff --git a/sonar/webhooks.py b/sonar/webhooks.py index 2f861228..dccc7ee2 100644 --- a/sonar/webhooks.py +++ b/sonar/webhooks.py @@ -89,6 +89,7 @@ def load(cls, endpoint: pf.Platform, data: types.ApiPayload) -> WebHook: :param ApiPayload data: The webhook data received from the API :return: The created WebHook """ + log.debug("LOading Webhook with %s", data) name, project = data["name"], data.get("project", None) if (o := WebHook.CACHE.get(name, project, endpoint.local_url)) is None: o = WebHook(endpoint, name, data["url"], data.get("secret", None), project) @@ -119,7 +120,9 @@ def __hash__(self) -> int: def refresh(self) -> None: """Reads the Webhook data on the SonarQube platform and updates the local object""" + log.debug("Refreshing %s with proj %s", str(self), str(self.project)) data = json.loads(self.get(WebHook.API[c.LIST], params=None if not self.project else {"project": self.project}).text) + log.debug("Refreshing %s with data %s", str(self), str(data)) wh_data = next((wh for wh in data["webhooks"] if wh["name"] == self.name), None) if wh_data is None: wh_name = str(self) @@ -148,6 +151,7 @@ def update(self, **kwargs: str) -> bool: :param kwargs: dict - "url", "name", "secret" are the looked up keys :return: Whether the operation succeeded """ + log.info("Updating %s with %s", str(self), str(self.project)) params = {"webhook": self.key, "name": self.name, "url": self.webhook_url} | util.remove_nones(kwargs) ok = self.post(WebHook.API[c.UPDATE], params=params).ok self.refresh() @@ -189,10 +193,10 @@ def search(endpoint: pf.Platform, params: types.ApiParams = None) -> dict[str, W def get_list(endpoint: pf.Platform, project_key: Optional[str] = None) -> dict[str, WebHook]: """Returns the list of web hooks, global ones or for a project if project key is given""" log.debug("Getting webhooks for project key %s", str(project_key)) - params = None - if project_key is not None: - params = {"project": project_key} - return search(endpoint, params) + wh_list = search(endpoint, {"project": project_key} if project_key else None) + for wh in wh_list.values(): + wh.project = project_key + return wh_list def export(endpoint: pf.Platform, project_key: Optional[str] = None, full: bool = False) -> types.ObjectJsonRepr: diff --git a/test/files/config.json b/test/files/config.json index bd51fbe2..d0432cf1 100644 --- a/test/files/config.json +++ b/test/files/config.json @@ -2392,8 +2392,8 @@ "severity": "MAJOR", "impacts": { "SECURITY": "LOW", - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2407,8 +2407,8 @@ "key": "python:S6714", "severity": "MAJOR", "impacts": { - "RELIABILITY": "LOW", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "LOW" } }, { @@ -2422,8 +2422,8 @@ "key": "python:S6727", "severity": "CRITICAL", "impacts": { - "MAINTAINABILITY": "LOW", "SECURITY": "LOW", + "MAINTAINABILITY": "LOW", "RELIABILITY": "HIGH" } }, @@ -2446,8 +2446,8 @@ "key": "python:S6734", "severity": "CRITICAL", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "HIGH" + "MAINTAINABILITY": "HIGH", + "RELIABILITY": "MEDIUM" } }, { @@ -2461,8 +2461,8 @@ "key": "python:S6741", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2539,25 +2539,25 @@ "key": "python:S6882", "severity": "CRITICAL", "impacts": { - "RELIABILITY": "MEDIUM", "SECURITY": "LOW", - "MAINTAINABILITY": "HIGH" + "MAINTAINABILITY": "HIGH", + "RELIABILITY": "MEDIUM" } }, { "key": "python:S6883", "severity": "CRITICAL", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "HIGH" + "MAINTAINABILITY": "HIGH", + "RELIABILITY": "MEDIUM" } }, { "key": "python:S6887", "severity": "CRITICAL", "impacts": { - "MAINTAINABILITY": "HIGH", - "RELIABILITY": "HIGH" + "RELIABILITY": "HIGH", + "MAINTAINABILITY": "HIGH" } }, { @@ -2581,8 +2581,8 @@ "key": "python:S6900", "severity": "CRITICAL", "impacts": { - "RELIABILITY": "MEDIUM", "SECURITY": "LOW", + "RELIABILITY": "MEDIUM", "MAINTAINABILITY": "HIGH" } }, @@ -2619,16 +2619,16 @@ "key": "python:S6919", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { "key": "python:S6925", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2643,8 +2643,8 @@ "key": "python:S6929", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2673,16 +2673,16 @@ "key": "python:S6973", "severity": "MAJOR", "impacts": { - "RELIABILITY": "LOW", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "LOW" } }, { "key": "python:S6974", "severity": "CRITICAL", "impacts": { - "RELIABILITY": "HIGH", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "HIGH" } }, { @@ -2842,8 +2842,8 @@ "key": "pythonenterprise:S7182", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2864,8 +2864,8 @@ "key": "pythonenterprise:S7191", "severity": "MAJOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -2927,8 +2927,8 @@ "key": "pythonenterprise:S7471", "severity": "MINOR", "impacts": { - "RELIABILITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "RELIABILITY": "MEDIUM" } }, { @@ -3266,6 +3266,54 @@ } }, "projects": { + "25k-issues": { + "name": "25k-issues", + "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" + } + } + }, + "BANKING-ACQUISITIONS": { + "name": "BANKING-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-ACQUISITIONS-DILIGENCE": { + "name": "BANKING-ACQUISITIONS-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-AFRICA-OPS": { "name": "Banking Africa operations", "tags": "africa", @@ -3359,6 +3407,21 @@ } } }, + "BANKING-MERGERS": { + "name": "BANKING-MERGERS", + "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", @@ -3585,8 +3648,9 @@ } } }, - "bad:stale-project": { - "name": "BANKING-ASIA-OPS", + "RETAIL-WEB": { + "name": "Retail Web", + "tags": "banking, retail", "visibility": "private", "links": [ { @@ -3597,28 +3661,24 @@ ], "permissions": { "users": { - "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", - "olivier-k31581": "admin, 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, issueadmin, scan, securityhotspotadmin, user", - "sonar-users": "codeviewer, user" + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" } } }, - "demo:github-actions-maven": { - "name": "demo:github-actions-maven", + "TEST": { + "name": "name", "visibility": "private", - "binding": { - "key": "GitHub okorach", - "repository": "okorach/demo-actions-maven", - "summaryCommentEnabled": true - }, "permissions": { "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "admin": "admin" }, "groups": { "developers": "codeviewer, user", @@ -3630,13 +3690,12 @@ } } }, - "demo:github-actions-mono-cli": { - "name": "GitHub / Actions / monorepo CLI", + "TESTSYNC": { + "name": "TESTSYNC", "visibility": "private", "permissions": { "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "admin": "admin" }, "groups": { "developers": "codeviewer, user", @@ -3648,13 +3707,20 @@ } }, "branches": { - "master": { + "main": { "isMain": true + }, + "release-3.x": { + "keepWhenInactive": true + }, + "develop": { + "keepWhenInactive": true } } }, - "demo:github-actions-mono-dotnet": { - "name": "GitHub / Actions / monorepo .Net Core", + "ai-code-fix": { + "name": "AI CodeFix examples", + "tags": "demo", "visibility": "private", "permissions": { "users": { @@ -3670,42 +3736,45 @@ "tech-leads": "codeviewer, issueadmin, user" } }, - "branches": { - "master": { - "isMain": true - } - }, - "sonar.text.inclusions": "**/*.sh, **/*.bash, **/*.zsh, **/*.ksh, **/*.ps1, **/*.properties, **/*.conf, **/*.pem, **/*.config, .env, .aws/config, **/*" + "containsAiCode": true }, - "demo:github-actions-mono-gradle": { - "name": "GitHub / Actions / monorepo Gradle", + "bad:stale-project": { + "name": "BANKING-ASIA-OPS", "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], "permissions": { "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "admin": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "olivier-k31581": "admin, user" }, "groups": { - "developers": "codeviewer, user", - "project-admins": "admin, codeviewer, user", "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", - "sonar-administrators": "admin, codeviewer, user", - "sonar-users": "user", - "tech-leads": "codeviewer, issueadmin, user" - } - }, - "branches": { - "master": { - "isMain": true + "sonar-administrators": "admin, codeviewer, issueadmin, scan, securityhotspotadmin, user", + "sonar-users": "codeviewer, user" } } }, - "demo:github-actions-mono-maven": { - "name": "demo:github-actions-mono-maven", + "checkstyle-issues": { + "name": "Project with checkstyle issues", "visibility": "private", + "qualityProfiles": { + "java": "Sonar Way + Checkstyle" + }, + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], "permissions": { "users": { - "admin": "admin, codeviewer, user", "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" }, "groups": { @@ -3718,16 +3787,16 @@ } }, "branches": { - "master": { - "keepWhenInactive": true - }, "main": { "isMain": true + }, + "develop": { + "keepWhenInactive": true } } }, - "demo:gitlab-ci-maven": { - "name": "GitLab-CI / Maven", + "code-variants": { + "name": "code-variants", "visibility": "private", "permissions": { "users": { @@ -3744,13 +3813,19 @@ } } }, - "demo:gitlab:gradle": { - "name": "demo:gitlab:gradle", + "creedengo": { + "name": "Creedengo", "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], "permissions": { "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "admin": "admin" }, "groups": { "developers": "codeviewer, user", @@ -3762,14 +3837,21 @@ } } }, - "demo:gitlab:scanner-cli": { - "name": "demo:gitlab:scanner-cli", + "creedengo-issues": { + "name": "Creedengo", "visibility": "private", - "binding": { - "key": "gitlab.com", - "repository": "30584574" - }, + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, "groups": { "developers": "codeviewer, user", "project-admins": "admin, codeviewer, user", @@ -3780,24 +3862,18 @@ } }, "branches": { - "master": { + "develop": { "keepWhenInactive": true }, "main": { "isMain": true } - } + }, + "sonar.coverage.exclusions": "**/*.css, **/.htm*" }, - "demo:java-security": { - "name": "security", + "demo-autoconfig": { + "name": "demo-autoconfig", "visibility": "private", - "links": [ - { - "type": "homepage", - "name": "homepage", - "url": "http://maven.apache.org" - } - ], "permissions": { "users": { "admin": "admin, codeviewer, user" @@ -3812,8 +3888,8 @@ } } }, - "demo:jcl": { - "name": "JCL Demo", + "demo-rules": { + "name": "demo-rules", "visibility": "private", "permissions": { "users": { @@ -3830,13 +3906,546 @@ } } }, - "demo:secrets": { - "name": "Secrets detection", - "tags": "demo", + "demo:ado-cli": { + "name": "demo:ado-cli", "visibility": "private", - "qualityProfiles": { - "secrets": "Corp Way" + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:autoconfig": { + "name": "demo:autoconfig", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:autoconfig:carbon": { + "name": "demo:autoconfig:carbon", + "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": { + "develop": { + "isMain": true + } + } + }, + "demo:coverage": { + "name": "demo:coverage", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:github-actions-cli": { + "name": "GitHub / Actions / CLI", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:github-actions-maven": { + "name": "demo:github-actions-maven", + "visibility": "private", + "binding": { + "key": "GitHub okorach", + "repository": "okorach/demo-actions-maven", + "summaryCommentEnabled": true + }, + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:github-actions-mono-cli": { + "name": "GitHub / Actions / monorepo CLI", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + } + }, + "demo:github-actions-mono-dotnet": { + "name": "GitHub / Actions / monorepo .Net Core", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + }, + "sonar.text.inclusions": "**/*.sh, **/*.bash, **/*.zsh, **/*.ksh, **/*.ps1, **/*.properties, **/*.conf, **/*.pem, **/*.config, .env, .aws/config, **/*" + }, + "demo:github-actions-mono-gradle": { + "name": "GitHub / Actions / monorepo Gradle", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + } + } + }, + "demo:github-actions-mono-maven": { + "name": "demo:github-actions-mono-maven", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "demo:gitlab-ci-maven": { + "name": "GitLab-CI / Maven", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:gitlab:gradle": { + "name": "demo:gitlab:gradle", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:gitlab:scanner-cli": { + "name": "demo:gitlab:scanner-cli", + "visibility": "private", + "binding": { + "key": "gitlab.com", + "repository": "30584574" + }, + "permissions": { + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "demo:java-security": { + "name": "security", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], + "permissions": { + "users": { + "admin": "admin, codeviewer, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:juice-shop": { + "name": "juice-shop", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "https://owasp-juice.shop" + }, + { + "type": "scm", + "name": "scm", + "url": "https://github.com/juice-shop/juice-shop.git" + }, + { + "type": "issue", + "name": "issue", + "url": "https://github.com/juice-shop/juice-shop/issues" + } + ], + "permissions": { + "users": { + "admin": "admin" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "demo:sca-log4shell-detect-maven": { + "name": "SCA demo - Log4shell detect - Maven", + "visibility": "private", + "links": [ + { + "type": "scm", + "name": "scm", + "url": "https://github.com/okorach/log4shell-detect" + }, + { + "type": "homepage", + "name": "homepage", + "url": "https://github.com/okorach/log4shell-detect" + } + ], + "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 + } + } + }, + "demo:secrets": { + "name": "Secrets detection", + "tags": "demo", + "visibility": "private", + "qualityProfiles": { + "secrets": "Corp Way" + }, + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "sonar.text.inclusions": "**/*, **/*.bash, **/*.conf, **/*.config, **/*.ksh, **/*.pem, **/*.properties, **/*.ps1, **/*.sh, **/*.zsh, .aws/config, .env, **/*.xml" + }, + "demo:target-awareness": { + "name": "demo:target-awareness", + "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" + } + } + }, + "dotnet-with-cli": { + "name": "dotnet-with-cli", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "dvpa": { + "name": "dvpa", + "visibility": "private", + "newCodePeriod": "NUMBER_OF_DAYS = 30", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "sonar.cfamily.generateComputedConfig": "false" + }, + "exclusions-2": { + "name": "exclusions-2", + "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" + } + } + }, + "file-issue": { + "name": "file-issue", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "gradle-with-cli": { + "name": "gradle-with-cli", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "maven-with-cli": { + "name": "maven-with-cli", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "mute-in-ide": { + "name": "Mute issue in IDE", + "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" + } + } + }, + "no-scm": { + "name": "no-scm", + "visibility": "private", "permissions": { "users": { "admin": "admin, codeviewer, user", @@ -3850,16 +4459,71 @@ "sonar-users": "user", "tech-leads": "codeviewer, issueadmin, user" } - }, - "sonar.text.inclusions": "**/*, **/*.bash, **/*.conf, **/*.config, **/*.ksh, **/*.pem, **/*.properties, **/*.ps1, **/*.sh, **/*.zsh, .aws/config, .env, **/*.xml" + } }, - "no-scm": { - "name": "no-scm", + "non-existing": { + "name": "non-existing", "visibility": "private", + "links": [ + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + }, + { + "type": "yahoo", + "name": "yahoo", + "url": "https://yahoo.com" + } + ], "permissions": { "users": { - "admin": "admin, codeviewer, user", - "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + "admin": "admin" }, "groups": { "developers": "codeviewer, user", @@ -3869,7 +4533,8 @@ "sonar-users": "user", "tech-leads": "codeviewer, issueadmin, user" } - } + }, + "containsAiCode": true }, "okorach-org_pr-demo_3a1857ec-cebc-49f2-96ac-9bbc99111469": { "name": "pr-demo", @@ -3960,6 +4625,24 @@ } } }, + "okorach_docker-hello-world": { + "name": "okorach_docker-hello-world", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, "okorach_sonar-tools": { "name": "Sonar Tools", "tags": "python", @@ -4004,6 +4687,78 @@ } ] }, + "okorach_sonar-tools-target": { + "name": "Sonar Tools Target", + "visibility": "private", + "permissions": { + "users": { + "admin": "admin, codeviewer, user", + "syncer": "codeviewer, issueadmin, securityhotspotadmin, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + }, + "develop": { + "keepWhenInactive": true + }, + "comma,branch": { + "keepWhenInactive": true + } + } + }, + "org.owasp.webgoat:webgoat": { + "name": "WebGoat", + "visibility": "private", + "qualityProfiles": { + "java": "Security Max" + }, + "links": [ + { + "type": "scm", + "name": "scm", + "url": "https://github.com/WebGoat/WebGoat" + }, + { + "type": "homepage", + "name": "homepage", + "url": "https://github.com/WebGoat/WebGoat" + }, + { + "type": "issue", + "name": "issue", + "url": "https://github.com/WebGoat/WebGoat/issues" + } + ], + "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 + } + } + }, "project-without-analyses": { "name": "Project without analyses", "visibility": "private", @@ -4164,6 +4919,152 @@ } } }, + "source-key": { + "name": "Source", + "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, issueadmin, securityhotspotadmin, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "master": { + "isMain": true + }, + "develop": { + "keepWhenInactive": true + } + } + }, + "test:juice-shop": { + "name": "Juice Shop", + "visibility": "private", + "links": [ + { + "type": "scm", + "name": "scm", + "url": "https://github.com/juice-shop/juice-shop.git" + }, + { + "type": "issue", + "name": "issue", + "url": "https://github.com/juice-shop/juice-shop/issues" + }, + { + "type": "homepage", + "name": "homepage", + "url": "https://owasp-juice.shop" + } + ], + "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" + } + } + }, + "third-party-issues": { + "name": "Third party issues", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], + "permissions": { + "users": { + "admin": "admin, codeviewer, user" + }, + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + }, + "branches": { + "develop": { + "keepWhenInactive": true + }, + "main": { + "isMain": true + } + } + }, + "training:complexity": { + "name": "Training: Cyclomatic vs Cognitive complexity", + "visibility": "private", + "permissions": { + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "training:external-issues": { + "name": "Training: External issues import", + "visibility": "private", + "permissions": { + "groups": { + "developers": "codeviewer, user", + "project-admins": "admin, codeviewer, user", + "security-auditors": "codeviewer, issueadmin, securityhotspotadmin, user", + "sonar-administrators": "admin, codeviewer, user", + "sonar-users": "user", + "tech-leads": "codeviewer, issueadmin, user" + } + } + }, + "training:security": { + "name": "training:security", + "visibility": "private", + "links": [ + { + "type": "homepage", + "name": "homepage", + "url": "http://maven.apache.org" + } + ], + "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" + } + } + }, "web-backend": { "name": "Web back-end", "visibility": "private", @@ -4243,14 +5144,14 @@ }, "isMain": true }, - "Other Branch": { + "BRANCH foo": { "projects": { "ai-code-fix": "main", "BANKING-AFRICA-OPS": "main", "dvpa": "main" } }, - "BRANCH foo": { + "Other Branch": { "projects": { "ai-code-fix": "main", "BANKING-AFRICA-OPS": "main", @@ -4669,8 +5570,8 @@ "jcl:Track_usage_of_rogue_programs": { "severity": "INFO", "impacts": { - "MAINTAINABILITY": "LOW", "SECURITY": "HIGH", + "MAINTAINABILITY": "LOW", "RELIABILITY": "MEDIUM" }, "params": { @@ -4683,8 +5584,8 @@ "java:Don_t_be_rude": { "severity": "MAJOR", "impacts": { - "SECURITY": "MEDIUM", - "MAINTAINABILITY": "MEDIUM" + "MAINTAINABILITY": "MEDIUM", + "SECURITY": "MEDIUM" }, "params": { "message": "Hey don't be rude!", diff --git a/test/unit/test_apps.py b/test/unit/test_apps.py index a481dd0e..d80f50c0 100644 --- a/test/unit/test_apps.py +++ b/test/unit/test_apps.py @@ -259,9 +259,9 @@ def test_app_branches(get_test_app: Generator[App]) -> None: APP_BRANCH_MAIN, APP_BRANCH_2 = "BRANCH foo", "Other Branch" definition = { "branches": { - APP_BRANCH_2: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_MAIN, "demo:jcl": "main", "demo:java-security": "main"}}, + APP_BRANCH_2: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_MAIN, tutil.PROJECT_1: "main", "demo:java-security": "main"}}, APP_BRANCH_MAIN: { - "projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, "demo:jcl": "main", "demo:java-security": "main"}, + "projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, tutil.PROJECT_1: "main", "demo:java-security": "main"}, "isMain": True, }, } @@ -273,10 +273,10 @@ def test_app_branches(get_test_app: Generator[App]) -> None: APP_BRANCH_MAIN, APP_BRANCH_2, APP_BRANCH_3 = "Main Branch", "Master", "MiBranch" definition = { "branches": { - APP_BRANCH_2: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_MAIN, "demo:jcl": "main", "demo:java-security": "main"}}, - APP_BRANCH_3: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, "demo:jcl": "main", "demo:java-security": "main"}}, + APP_BRANCH_2: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_MAIN, tutil.PROJECT_1: "main", "demo:java-security": "main"}}, + APP_BRANCH_3: {"projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, tutil.PROJECT_1: "main", "demo:java-security": "main"}}, APP_BRANCH_MAIN: { - "projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, "demo:jcl": "main", "demo:java-security": "main"}, + "projects": {tutil.PROJ_WITH_BRANCHES: tutil.BRANCH_3, tutil.PROJECT_1: "main", "demo:java-security": "main"}, "isMain": True, }, } diff --git a/test/unit/test_hotspots.py b/test/unit/test_hotspots.py index dee67b27..52f73ad8 100644 --- a/test/unit/test_hotspots.py +++ b/test/unit/test_hotspots.py @@ -27,7 +27,7 @@ def test_transitions() -> None: """test_transitions""" - hotspot_d = hotspots.search(endpoint=tutil.SQ, filters={"project": "pytorch"}) + hotspot_d = hotspots.search(endpoint=tutil.SQ, filters={"project": "test:juice-shop"}) hotspot = list(hotspot_d.values())[0] assert hotspot.mark_as_safe()