aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-ws
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-ws')
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/emails/EmailConfigurationService.java91
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/emails/WsEmailConfiguration.java129
2 files changed, 220 insertions, 0 deletions
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/EmailConfigurationService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/EmailConfigurationService.java
new file mode 100644
index 00000000000..785d61b88e4
--- /dev/null
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/EmailConfigurationService.java
@@ -0,0 +1,91 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 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.emails;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import org.sonarqube.ws.client.BaseService;
+import org.sonarqube.ws.client.DeleteRequest;
+import org.sonarqube.ws.client.HttpException;
+import org.sonarqube.ws.client.PostRequest;
+import org.sonarqube.ws.client.WsConnector;
+import org.sonarqube.ws.client.WsResponse;
+
+import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
+
+public class EmailConfigurationService extends BaseService {
+
+
+ private static final String EMAIL_CONFIGURATION_ID = "email-configuration";
+
+ public EmailConfigurationService(WsConnector wsConnector) {
+ super(wsConnector, "api/v2/system/email-configurations");
+ }
+
+ public String createEmailConfiguration(WsEmailConfiguration config) {
+ String body = String.format("""
+ {
+ "host": "%s",
+ "port": "%s",
+ "securityProtocol": "%s",
+ "fromAddress": "%s",
+ "fromName": "%s",
+ "subjectPrefix": "%s",
+ "authMethod": "%s",
+ "username": "%s",
+ "basicPassword": "%s",
+ "oauthAuthenticationHost": "%s",
+ "oauthClientId": "%s",
+ "oauthClientSecret": "%s",
+ "oauthTenant": "%s"
+ }
+ """,
+ config.host(),
+ config.port(),
+ config.securityProtocol(),
+ config.fromAddress(),
+ config.fromName(),
+ config.subjectPrefix(),
+ config.authMethod(),
+ config.username(),
+ config.basicPassword(),
+ config.oauthAuthenticationHost(),
+ config.oauthClientId(),
+ config.oauthClientSecret(),
+ config.oauthTenant()
+ );
+
+ WsResponse response = call(
+ new PostRequest(path()).setBody(body)
+ );
+ return new Gson().fromJson(response.content(), JsonObject.class).get("id").getAsString();
+ }
+
+ public void deleteEmailConfiguration() {
+ try {
+ call(new DeleteRequest(path() + "/" + EMAIL_CONFIGURATION_ID));
+ } catch (HttpException e) {
+ // We ignore if it gets deleted while there is no configuration
+ if (e.code() != HTTP_NOT_FOUND) {
+ throw e;
+ }
+ }
+ }
+}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/WsEmailConfiguration.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/WsEmailConfiguration.java
new file mode 100644
index 00000000000..a44f47edc3b
--- /dev/null
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/emails/WsEmailConfiguration.java
@@ -0,0 +1,129 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 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.emails;
+
+public record WsEmailConfiguration(
+ String host,
+ String port,
+ String securityProtocol,
+ String fromAddress,
+ String fromName,
+ String subjectPrefix,
+ String authMethod,
+ String username,
+ String basicPassword,
+ String oauthAuthenticationHost,
+ String oauthClientId,
+ String oauthClientSecret,
+ String oauthTenant
+ ) {
+
+ public static WsEmailConfigurationBuilder builder() {
+ return new WsEmailConfigurationBuilder();
+ }
+
+ public static final class WsEmailConfigurationBuilder {
+ private String host;
+ private String port;
+ private String securityProtocol;
+ private String fromAddress;
+ private String fromName;
+ private String subjectPrefix;
+ private String authMethod;
+ private String username;
+ private String basicPassword;
+ private String oauthAuthenticationHost;
+ private String oauthClientId;
+ private String oauthClientSecret;
+ private String oauthTenant;
+
+ private WsEmailConfigurationBuilder() {
+ }
+
+ public WsEmailConfigurationBuilder host(String host) {
+ this.host = host;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder port(String port) {
+ this.port = port;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder securityProtocol(String securityProtocol) {
+ this.securityProtocol = securityProtocol;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder fromAddress(String fromAddress) {
+ this.fromAddress = fromAddress;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder fromName(String fromName) {
+ this.fromName = fromName;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder subjectPrefix(String subjectPrefix) {
+ this.subjectPrefix = subjectPrefix;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder authMethod(String authMethod) {
+ this.authMethod = authMethod;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder username(String username) {
+ this.username = username;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder basicPassword(String basicPassword) {
+ this.basicPassword = basicPassword;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder oauthAuthenticationHost(String oauthAuthenticationHost) {
+ this.oauthAuthenticationHost = oauthAuthenticationHost;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder oauthClientId(String oauthClientId) {
+ this.oauthClientId = oauthClientId;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder oauthClientSecret(String oauthClientSecret) {
+ this.oauthClientSecret = oauthClientSecret;
+ return this;
+ }
+
+ public WsEmailConfigurationBuilder oauthTenant(String oauthTenant) {
+ this.oauthTenant = oauthTenant;
+ return this;
+ }
+
+ public WsEmailConfiguration build() {
+ return new WsEmailConfiguration(host, port, securityProtocol, fromAddress, fromName, subjectPrefix, authMethod, username, basicPassword, oauthAuthenticationHost, oauthClientId, oauthClientSecret, oauthTenant);
+ }
+ }
+}