From fbb917ca25af919bd68754563e494e77c28dafaa Mon Sep 17 00:00:00 2001 From: Aurelien Poscia Date: Wed, 27 Sep 2023 08:20:57 +0200 Subject: [PATCH] SONAR-20532 Add IT for GitHub custom roles --- .../sonarqube/ws/client/DefaultWsClient.java | 8 +++ .../org/sonarqube/ws/client/WsClient.java | 3 + .../AddGithubPermissionMappingRequest.java | 31 +++++++++ .../permissions/GithubPermissionsService.java | 49 ++++++++++++++ .../permissions/SonarqubePermissions.java | 64 +++++++++++++++++++ .../permissions/package-info.java | 23 +++++++ 6 files changed, 178 insertions(+) create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/AddGithubPermissionMappingRequest.java create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsService.java create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/SonarqubePermissions.java create mode 100644 sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/package-info.java diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java index 50f5384554e..9fa2c696597 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java @@ -34,6 +34,7 @@ import org.sonarqube.ws.client.duplications.DuplicationsService; import org.sonarqube.ws.client.editions.EditionsService; import org.sonarqube.ws.client.emails.EmailsService; import org.sonarqube.ws.client.favorites.FavoritesService; +import org.sonarqube.ws.client.github.provisioning.permissions.GithubPermissionsService; import org.sonarqube.ws.client.githubprovisioning.GithubProvisioningService; import org.sonarqube.ws.client.governancereports.GovernanceReportsService; import org.sonarqube.ws.client.hotspots.HotspotsService; @@ -142,6 +143,7 @@ class DefaultWsClient implements WsClient { private final RegulatoryReportsService regulatoryReportsService; private final SonarLintServerPushService sonarLintPushService; private final GithubProvisioningService githubProvisioningService; + private final GithubPermissionsService githubPermissionsService; DefaultWsClient(WsConnector wsConnector) { this.wsConnector = wsConnector; @@ -201,6 +203,7 @@ class DefaultWsClient implements WsClient { this.sonarLintPushService = new SonarLintServerPushService(wsConnector); this.regulatoryReportsService = new RegulatoryReportsService(wsConnector); this.githubProvisioningService = new GithubProvisioningService(wsConnector); + this.githubPermissionsService = new GithubPermissionsService(wsConnector); } @Override @@ -279,6 +282,11 @@ class DefaultWsClient implements WsClient { return favoritesService; } + @Override + public GithubPermissionsService githubPermissionsService() { + return githubPermissionsService; + } + @Override public GovernanceReportsService governanceReports() { return governanceReportsService; diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java index d7ed0b38ad1..6b55d7ab29a 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java @@ -34,6 +34,7 @@ import org.sonarqube.ws.client.duplications.DuplicationsService; import org.sonarqube.ws.client.editions.EditionsService; import org.sonarqube.ws.client.emails.EmailsService; import org.sonarqube.ws.client.favorites.FavoritesService; +import org.sonarqube.ws.client.github.provisioning.permissions.GithubPermissionsService; import org.sonarqube.ws.client.githubprovisioning.GithubProvisioningService; import org.sonarqube.ws.client.governancereports.GovernanceReportsService; import org.sonarqube.ws.client.hotspots.HotspotsService; @@ -125,6 +126,8 @@ public interface WsClient { FavoritesService favorites(); + GithubPermissionsService githubPermissionsService(); + GovernanceReportsService governanceReports(); HotspotsService hotspots(); diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/AddGithubPermissionMappingRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/AddGithubPermissionMappingRequest.java new file mode 100644 index 00000000000..ffd65d2df9d --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/AddGithubPermissionMappingRequest.java @@ -0,0 +1,31 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client.github.provisioning.permissions; + +public class AddGithubPermissionMappingRequest { + private final String githubRole; + private final SonarqubePermissions permissions; + + public AddGithubPermissionMappingRequest(String githubRole, SonarqubePermissions permissions) { + this.githubRole = githubRole; + this.permissions = permissions; + } + +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsService.java new file mode 100644 index 00000000000..a68c47f9f14 --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/GithubPermissionsService.java @@ -0,0 +1,49 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client.github.provisioning.permissions; + +import com.google.gson.Gson; +import org.sonarqube.ws.MediaTypes; +import org.sonarqube.ws.client.BaseService; +import org.sonarqube.ws.client.PostRequest; +import org.sonarqube.ws.client.WsConnector; +import org.sonarqube.ws.client.WsResponse; + +public class GithubPermissionsService extends BaseService { + + public GithubPermissionsService(WsConnector wsConnector) { + super(wsConnector, "api/v2"); + } + + public void addPermissionMapping(AddGithubPermissionMappingRequest addGithubPermissionMappingRequest) { + try (WsResponse response = callEndpoint(addGithubPermissionMappingRequest)) { + if (!response.isSuccessful()) { + throw new IllegalStateException("Failed to add github permission mapping, http error code: " + response.code()); + } + } + } + + private WsResponse callEndpoint(AddGithubPermissionMappingRequest addGithubPermissionMappingRequest) { + return call( + new PostRequest(path("github-permission-mappings")) + .setBody(new Gson().toJson(addGithubPermissionMappingRequest)) + .setMediaType(MediaTypes.JSON)); + } +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/SonarqubePermissions.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/SonarqubePermissions.java new file mode 100644 index 00000000000..254ef080d64 --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/SonarqubePermissions.java @@ -0,0 +1,64 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.ws.client.github.provisioning.permissions; + +public class SonarqubePermissions { + private final boolean user; + private final boolean codeViewer; + private final boolean issueAdmin; + private final boolean securityHotspotAdmin; + + private final boolean admin; + + private final boolean scan; + + public SonarqubePermissions(boolean user, boolean codeViewer, boolean issueAdmin, boolean securityHotspotAdmin, boolean admin, boolean scan) { + this.user = user; + this.codeViewer = codeViewer; + this.issueAdmin = issueAdmin; + this.securityHotspotAdmin = securityHotspotAdmin; + this.admin = admin; + this.scan = scan; + } + + public boolean isUser() { + return user; + } + + public boolean isCodeViewer() { + return codeViewer; + } + + public boolean isIssueAdmin() { + return issueAdmin; + } + + public boolean isSecurityHotspotAdmin() { + return securityHotspotAdmin; + } + + public boolean isAdmin() { + return admin; + } + + public boolean isScan() { + return scan; + } +} diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/package-info.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/package-info.java new file mode 100644 index 00000000000..00985a561cd --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/github/provisioning/permissions/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonarqube.ws.client.github.provisioning.permissions; + +import javax.annotation.ParametersAreNonnullByDefault; -- 2.39.5