You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GitlabConfigurationService.java 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2024 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonarqube.ws.client.gitlab.configuration;
  21. import com.google.gson.Gson;
  22. import com.google.gson.JsonObject;
  23. import org.sonarqube.ws.client.BaseService;
  24. import org.sonarqube.ws.client.PatchRequest;
  25. import org.sonarqube.ws.client.PostRequest;
  26. import org.sonarqube.ws.client.WsConnector;
  27. import org.sonarqube.ws.client.WsResponse;
  28. public class GitlabConfigurationService extends BaseService {
  29. public GitlabConfigurationService(WsConnector wsConnector) {
  30. super(wsConnector, "api/v2/dop-translation/gitlab-configurations");
  31. }
  32. public String saveGitlabConfiguration(GitlabConfiguration gitlabConfiguration) {
  33. String body = String.format("""
  34. {
  35. "enabled": "%s",
  36. "applicationId": "%s",
  37. "url": "%s",
  38. "secret": "%s",
  39. "synchronizeGroups": "%s",
  40. "provisioningType": "%s",
  41. "allowUsersToSignUp": "%s",
  42. "provisioningToken": "%s",
  43. "provisioningGroups": ["%s"]
  44. }
  45. """, gitlabConfiguration.enabled(), gitlabConfiguration.applicationId(), gitlabConfiguration.url(), gitlabConfiguration.secret(),
  46. gitlabConfiguration.synchronizeGroups(), gitlabConfiguration.provisioningType(), gitlabConfiguration.allowUsersToSignUp(),
  47. gitlabConfiguration.provisioningToken(), gitlabConfiguration.singleProvisioningGroup());
  48. WsResponse response = call(
  49. new PostRequest(path()).setBody(body)
  50. );
  51. return new Gson().fromJson(response.content(), JsonObject.class).get("id").getAsString();
  52. }
  53. public void enableAutoProvisioning(String configId) {
  54. setProvisioningMode(configId, "AUTO_PROVISIONING");
  55. }
  56. public void disableAutoProvisioning(String configId) {
  57. setProvisioningMode(configId, "JIT");
  58. }
  59. private void setProvisioningMode(String configId, String provisioningMode) {
  60. String body = String.format("""
  61. {
  62. "provisioningType": "%s"
  63. }
  64. """, provisioningMode);
  65. call(
  66. new PatchRequest(path(configId)).setBody(body).setContentType(APPLICATION_MERGE_PATCH_JSON)
  67. );
  68. }
  69. }