This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 1939457bd [Improve] Merge dev-2.1.3 Docker & Email BackedEnd Improve 
Into dev (#3594)
1939457bd is described below

commit 1939457bde7a1daab2db03ca33baa54279b2dff5
Author: zhengke zhou <[email protected]>
AuthorDate: Wed Mar 13 14:23:28 2024 +0800

    [Improve] Merge dev-2.1.3 Docker & Email BackedEnd Improve Into dev (#3594)
---
 .../src/main/assembly/script/data/mysql-data.sql   |  30 +++--
 .../src/main/assembly/script/data/pgsql-data.sql   |  31 +++--
 .../streampark/console/core/bean/DockerConfig.java |  31 ++++-
 .../streampark/console/core/bean/SenderEmail.java  |  67 +++++++++++
 .../console/core/controller/SettingController.java |  51 ++++++++
 .../console/core/service/SettingService.java       |  43 +++++++
 .../core/service/impl/AppBuildPipeServiceImpl.java |   2 +-
 .../core/service/impl/SettingServiceImpl.java      | 130 +++++++++++++++++++++
 .../src/main/resources/db/data-h2.sql              |   4 +-
 .../console/core/service/SettingServiceTest.java   | 116 ++++++++++++++++++
 10 files changed, 466 insertions(+), 39 deletions(-)

diff --git 
a/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
 
b/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
index be58d97a2..5ae06037d 100644
--- 
a/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
+++ 
b/streampark-console/streampark-console-service/src/main/assembly/script/data/mysql-data.sql
@@ -275,22 +275,20 @@ insert into `t_role_menu` values (100110, 100002, 150504);
 -- ----------------------------
 -- Records of t_setting
 -- ----------------------------
-insert into `t_setting` values (1, 'streampark.maven.settings', null, 'Maven 
Settings File Path', 'Maven Settings.xml 完整路径', 1);
-insert into `t_setting` values (2, 'streampark.maven.central.repository', 
null, 'Maven Central Repository', 'Maven 私服地址', 1);
-insert into `t_setting` values (3, 'streampark.maven.auth.user', null, 'Maven 
Central Repository Auth User', 'Maven 私服认证用户名', 1);
-insert into `t_setting` values (4, 'streampark.maven.auth.password', null, 
'Maven Central Repository Auth Password', 'Maven 私服认证密码', 1);
-insert into `t_setting` values (5, 'alert.email.host', null, 'Alert Email Smtp 
Host', '告警邮箱Smtp Host', 1);
-insert into `t_setting` values (6, 'alert.email.port', null, 'Alert Email Smtp 
Port', '告警邮箱的Smtp Port', 1);
-insert into `t_setting` values (7, 'alert.email.from', null, 'Alert  Email 
From', '发送告警的邮箱', 1);
-insert into `t_setting` values (8, 'alert.email.userName', null, 'Alert  Email 
User', '用来发送告警邮箱的认证用户名', 1);
-insert into `t_setting` values (0, 'alert.email.password', null, 'Alert Email 
Password', '用来发送告警邮箱的认证密码', 1);
-insert into `t_setting` values (10, 'alert.email.ssl', 'false', 'Alert Email 
Is SSL', '发送告警的邮箱是否开启SSL', 2);
-insert into `t_setting` values (11, 'docker.register.address', null, 'Docker 
Register Address', 'Docker容器服务地址', 1);
-insert into `t_setting` values (12, 'docker.register.user', null, 'Docker 
Register User', 'Docker容器服务认证用户名', 1);
-insert into `t_setting` values (13, 'docker.register.password', null, 'Docker 
Register Password', 'Docker容器服务认证密码', 1);
-insert into `t_setting` values (14, 'docker.register.namespace', null, 
'Namespace for docker image used in docker building env and target image 
register', 'Docker命名空间', 1);
-insert into `t_setting` values (15, 'ingress.mode.default', null, 
'Automatically generate an nginx-based ingress by passing in a domain name', 
'Ingress域名地址', 1);
-
+insert into `t_setting` values (1, 'streampark.maven.settings', null, 'Maven 
Settings File Path', 'Maven Settings.xml full path', 1);
+insert into `t_setting` values (2, 'streampark.maven.central.repository', 
null, 'Maven Central Repository', 'Maven private server address', 1);
+insert into `t_setting` values (3, 'streampark.maven.auth.user', null, 'Maven 
Central Repository Auth User', 'Maven private server authentication username', 
1);
+insert into `t_setting` values (4, 'streampark.maven.auth.password', null, 
'Maven Central Repository Auth Password', 'Maven private server authentication 
password', 1);
+insert into `t_setting` values (5, 'alert.email.host', null, 'Alert Email Smtp 
Host', 'Alert Mailbox Smtp Host', 1);
+insert into `t_setting` values (6, 'alert.email.port', null, 'Alert Email Smtp 
Port', 'Smtp Port of the alarm mailbox', 1);
+insert into `t_setting` values (7, 'alert.email.from', null, 'Alert Sender 
Email', 'Email to send alerts', 1);
+insert into `t_setting` values (8, 'alert.email.userName', null, 'Alert  Email 
User', 'Authentication username used to send alert emails', 1);
+insert into `t_setting` values (9, 'alert.email.password', null, 'Alert Email 
Password', 'Authentication password used to send alarm email', 1);
+insert into `t_setting` values (10, 'alert.email.ssl', 'false', 'Alert Email 
SSL', 'Whether to enable SSL in the mailbox that sends the alert', 2);insert 
into `t_setting` values (11, 'docker.register.address', null, 'Docker Register 
Address', 'Docker container service address', 1);
+insert into `t_setting` values (12, 'docker.register.user', null, 'Docker 
Register User', 'Docker container service authentication username', 1);
+insert into `t_setting` values (13, 'docker.register.password', null, 'Docker 
Register Password', 'Docker container service authentication password', 1);
+insert into `t_setting` values (14, 'docker.register.namespace', null, 'Docker 
namespace', 'Namespace for docker image used in docker building env and target 
image register', 1);
+insert into `t_setting` values (15, 'ingress.mode.default', null, 'Ingress 
domain address', 'Automatically generate an nginx-based ingress by passing in a 
domain name', 1);
 -- ----------------------------
 -- Records of t_user
 -- ----------------------------
diff --git 
a/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
 
b/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
index 1e9246a88..0e5a96462 100644
--- 
a/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
+++ 
b/streampark-console/streampark-console-service/src/main/assembly/script/data/pgsql-data.sql
@@ -240,22 +240,21 @@ insert into "public"."t_role_menu" (role_id, menu_id) 
values (100002, 130603);
 -- ----------------------------
 -- Records of t_setting
 -- ----------------------------
-insert into "public"."t_setting" values (1, 'streampark.maven.settings', null, 
'Maven Settings File Path', 'Maven Settings.xml 完整路径', 1);
-insert into "public"."t_setting" values (2, 
'streampark.maven.central.repository', null, 'Maven Central Repository', 'Maven 
私服地址', 1);
-insert into "public"."t_setting" values (3, 'streampark.maven.auth.user', 
null, 'Maven Central Repository Auth User', 'Maven 私服认证用户名', 1);
-insert into "public"."t_setting" values (4, 'streampark.maven.auth.password', 
null, 'Maven Central Repository Auth Password', 'Maven 私服认证密码', 1);
-insert into "public"."t_setting" values (5, 'alert.email.host', null, 'Alert 
Email Smtp Host', '告警邮箱Smtp Host', 1);
-insert into "public"."t_setting" values (6, 'alert.email.port', null, 'Alert 
Email Smtp Port', '告警邮箱的Smtp Port', 1);
-insert into "public"."t_setting" values (7, 'alert.email.from', null, 'Alert  
Email From', '发送告警的邮箱', 1);
-insert into "public"."t_setting" values (8, 'alert.email.userName', null, 
'Alert  Email User', '用来发送告警邮箱的认证用户名', 1);
-insert into "public"."t_setting" values (9, 'alert.email.password', null, 
'Alert Email Password', '用来发送告警邮箱的认证密码', 1);
-insert into "public"."t_setting" values (10, 'alert.email.ssl', 'false', 
'Alert Email Is SSL', '发送告警的邮箱是否开启SSL', 2);
-insert into "public"."t_setting" values (11, 'docker.register.address', null, 
'Docker Register Address', 'Docker容器服务地址', 1);
-insert into "public"."t_setting" values (12, 'docker.register.user', null, 
'Docker Register User', 'Docker容器服务认证用户名', 1);
-insert into "public"."t_setting" values (13, 'docker.register.password', null, 
'Docker Register Password', 'Docker容器服务认证密码', 1);
-insert into "public"."t_setting" values (14, 'docker.register.namespace', 
null, 'Namespace for docker image used in docker building env and target image 
register', 'Docker命名空间', 1);
-insert into "public"."t_setting" values (15, 'ingress.mode.default', null, 
'Automatically generate an nginx-based ingress by passing in a domain name', 
'Ingress域名地址', 1);
-
+insert into "public"."t_setting" values (1, 'streampark.maven.settings', null, 
'Maven Settings File Path', 'Maven Settings.xml full path', 1);
+insert into "public"."t_setting" values (2, 
'streampark.maven.central.repository', null, 'Maven Central Repository', 'Maven 
private server address', 1);
+insert into "public"."t_setting" values (3, 'streampark.maven.auth.user', 
null, 'Maven Central Repository Auth User', 'Maven private server 
authentication username', 1);
+insert into "public"."t_setting" values (4, 'streampark.maven.auth.password', 
null, 'Maven Central Repository Auth Password', 'Maven private server 
authentication password', 1);
+insert into "public"."t_setting" values (5, 'alert.email.host', null, 'Alert 
Email Smtp Host', 'Alert Mailbox Smtp Host', 1);
+insert into "public"."t_setting" values (6, 'alert.email.port', null, 'Alert 
Email Smtp Port', 'Smtp Port of the alarm mailbox', 1);
+insert into "public"."t_setting" values (7, 'alert.email.from', null, 'Alert 
Sender Email', 'Email to send alerts', 1);
+insert into "public"."t_setting" values (8, 'alert.email.userName', null, 
'Alert  Email User', 'Authentication username used to send alert emails', 1);
+insert into "public"."t_setting" values (9, 'alert.email.password', null, 
'Alert Email Password', 'Authentication password used to send alarm email', 1);
+insert into "public"."t_setting" values (10, 'alert.email.ssl', 'false', 
'Alert Email SSL', 'Whether to enable SSL in the mailbox that sends the alert', 
2);
+insert into "public"."t_setting" values (11, 'docker.register.address', null, 
'Docker Register Address', 'Docker container service address', 1);
+insert into "public"."t_setting" values (12, 'docker.register.user', null, 
'Docker Register User', 'Docker container service authentication username', 1);
+insert into "public"."t_setting" values (13, 'docker.register.password', null, 
'Docker Register Password', 'Docker container service authentication password', 
1);
+insert into "public"."t_setting" values (14, 'docker.register.namespace', 
null, 'Docker namespace', 'Namespace for docker image used in docker building 
env and target image register', 1);
+insert into "public"."t_setting" values (15, 'ingress.mode.default', null, 
'Ingress domain address', 'Automatically generate an nginx-based ingress by 
passing in a domain name', 1);
 -- ----------------------------
 -- Records of t_user
 -- ----------------------------
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/DockerConfig.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/DockerConfig.java
index 9be549fe2..a9c0544dc 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/DockerConfig.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/DockerConfig.java
@@ -17,14 +17,18 @@
 
 package org.apache.streampark.console.core.bean;
 
+import org.apache.streampark.console.core.entity.Setting;
 import org.apache.streampark.console.core.service.SettingService;
 
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
- * The DockerConfig class represents the configuration for an email system. It 
holds the SMTP host,
- * port, from address, username, password, and whether SSL is enabled.
+ * The DockerConfig class represents the configuration for docker system. It 
holds Registered
+ * address, username, password, and namespace.
  *
  * <p>This class also provides a static factory method to create an 
DockerConfig object from a map
  * of settings.
@@ -34,7 +38,7 @@ import lombok.extern.slf4j.Slf4j;
 public class DockerConfig {
 
   private String address;
-  private String user;
+  private String username;
   private String password;
   private String namespace;
 
@@ -47,7 +51,7 @@ public class DockerConfig {
               .get(SettingService.KEY_DOCKER_REGISTER_ADDRESS)
               .getSettingValue());
 
-      dockerConfig.setUser(
+      dockerConfig.setUsername(
           
SettingService.SETTINGS.get(SettingService.KEY_DOCKER_REGISTER_USER).getSettingValue());
 
       dockerConfig.setPassword(
@@ -66,4 +70,23 @@ public class DockerConfig {
     }
     return null;
   }
+
+  public static List<Setting> toSettings(DockerConfig dockerConfig) {
+    Setting address = new Setting();
+    address.setSettingKey(SettingService.KEY_DOCKER_REGISTER_ADDRESS);
+    address.setSettingValue(dockerConfig.getAddress());
+
+    Setting username = new Setting();
+    username.setSettingKey(SettingService.KEY_DOCKER_REGISTER_USER);
+    username.setSettingValue(dockerConfig.getUsername());
+
+    Setting password = new Setting();
+    password.setSettingKey(SettingService.KEY_DOCKER_REGISTER_PASSWORD);
+    password.setSettingValue(dockerConfig.getPassword());
+
+    Setting namespace = new Setting();
+    namespace.setSettingKey(SettingService.KEY_DOCKER_REGISTER_NAMESPACE);
+    namespace.setSettingValue(dockerConfig.getNamespace());
+    return Arrays.asList(address, username, password, namespace);
+  }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/SenderEmail.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/SenderEmail.java
new file mode 100644
index 000000000..30ee35fb1
--- /dev/null
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/SenderEmail.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.streampark.console.core.bean;
+
+import org.apache.streampark.console.core.entity.Setting;
+import org.apache.streampark.console.core.service.SettingService;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Getter
+@Setter
+public class SenderEmail {
+
+  private String host;
+  private Integer port;
+  private String from;
+  private String userName;
+  private String password;
+  private boolean ssl;
+
+  public static List<Setting> toSettings(SenderEmail senderEmail) {
+    Setting smtpHost = new Setting();
+    smtpHost.setSettingKey(SettingService.KEY_ALERT_EMAIL_HOST);
+    smtpHost.setSettingValue(senderEmail.getHost());
+
+    Setting smtpPort = new Setting();
+    smtpPort.setSettingKey(SettingService.KEY_ALERT_EMAIL_PORT);
+    smtpPort.setSettingValue(senderEmail.getPort().toString());
+
+    Setting smtpFrom = new Setting();
+    smtpFrom.setSettingKey(SettingService.KEY_ALERT_EMAIL_FROM);
+    smtpFrom.setSettingValue(senderEmail.getFrom());
+
+    Setting smtpUserName = new Setting();
+    smtpUserName.setSettingKey(SettingService.KEY_ALERT_EMAIL_USERNAME);
+    smtpUserName.setSettingValue(senderEmail.getUserName());
+
+    Setting smtpPassword = new Setting();
+    smtpPassword.setSettingKey(SettingService.KEY_ALERT_EMAIL_PASSWORD);
+    smtpPassword.setSettingValue(senderEmail.getPassword());
+
+    Setting smtpSsl = new Setting();
+    smtpSsl.setSettingKey(SettingService.KEY_ALERT_EMAIL_SSL);
+    smtpSsl.setSettingValue(senderEmail.isSsl() + "");
+
+    return Arrays.asList(smtpHost, smtpPort, smtpFrom, smtpUserName, 
smtpPassword, smtpSsl);
+  }
+}
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
index 82f463696..6517e7e1e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
@@ -19,6 +19,9 @@ package org.apache.streampark.console.core.controller;
 
 import org.apache.streampark.common.util.HadoopUtils;
 import org.apache.streampark.console.base.domain.RestResponse;
+import org.apache.streampark.console.core.bean.DockerConfig;
+import org.apache.streampark.console.core.bean.ResponseResult;
+import org.apache.streampark.console.core.bean.SenderEmail;
 import org.apache.streampark.console.core.entity.Setting;
 import org.apache.streampark.console.core.service.SettingService;
 
@@ -70,6 +73,54 @@ public class SettingController {
     return RestResponse.success(updated);
   }
 
+  @Operation(summary = "get Docker config")
+  @PostMapping("docker")
+  @RequiresPermissions("setting:view")
+  public RestResponse docker() {
+    DockerConfig dockerConfig = DockerConfig.fromSetting();
+    return RestResponse.success(dockerConfig);
+  }
+
+  @Operation(summary = "check docker setting")
+  @PostMapping("check/docker")
+  @RequiresPermissions("setting:view")
+  public RestResponse checkDocker(DockerConfig dockerConfig) {
+    ResponseResult result = settingService.checkDocker(dockerConfig);
+    return RestResponse.success(result);
+  }
+
+  @Operation(summary = "Update docker setting")
+  @PostMapping("update/docker")
+  @RequiresPermissions("setting:update")
+  public RestResponse updateDocker(DockerConfig dockerConfig) {
+    boolean updated = settingService.updateDocker(dockerConfig);
+    return RestResponse.success(updated);
+  }
+
+  @Operation(summary = "get sender email")
+  @PostMapping("email")
+  @RequiresPermissions("setting:view")
+  public RestResponse email() {
+    SenderEmail senderEmail = settingService.getSenderEmail();
+    return RestResponse.success(senderEmail);
+  }
+
+  @Operation(summary = "check email")
+  @PostMapping("check/email")
+  @RequiresPermissions("setting:view")
+  public RestResponse checkEmail(SenderEmail senderEmail) {
+    ResponseResult result = settingService.checkEmail(senderEmail);
+    return RestResponse.success(result);
+  }
+
+  @Operation(summary = "Update sender email")
+  @PostMapping("update/email")
+  @RequiresPermissions("setting:update")
+  public RestResponse updateEmail(SenderEmail senderEmail) {
+    boolean updated = settingService.updateEmail(senderEmail);
+    return RestResponse.success(updated);
+  }
+
   @Operation(summary = "Check hadoop status")
   @PostMapping("checkHadoop")
   public RestResponse checkHadoop() {
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/SettingService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/SettingService.java
index 16a01c63a..4be5c391a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/SettingService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/SettingService.java
@@ -19,6 +19,8 @@ package org.apache.streampark.console.core.service;
 
 import org.apache.streampark.console.core.bean.DockerConfig;
 import org.apache.streampark.console.core.bean.MavenConfig;
+import org.apache.streampark.console.core.bean.ResponseResult;
+import org.apache.streampark.console.core.bean.SenderEmail;
 import org.apache.streampark.console.core.entity.Setting;
 
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -92,4 +94,45 @@ public interface SettingService extends IService<Setting> {
    * @return The default ingress mode.
    */
   String getIngressModeDefault();
+
+  /**
+   * Before updating the Docker settings, verify that the parameters are 
filled in correctly, We
+   * check whether it is correct or not by concatenating the given 
registration URL.
+   *
+   * @param dockerConfig Docker config to be checked
+   * @return Server response value
+   */
+  ResponseResult checkDocker(DockerConfig dockerConfig);
+
+  /**
+   * update docker config
+   *
+   * @param dockerConfig Docker config needs to be updated
+   * @return Whether the update operation was successful
+   */
+  boolean updateDocker(DockerConfig dockerConfig);
+
+  /**
+   * Retrieves the senderEmail
+   *
+   * @return
+   */
+  SenderEmail getSenderEmail();
+
+  /**
+   * Before updating the email settings, verify that the parameters are filled 
in correctly, We
+   * check whether it is correct or not by concatenating the given host.
+   *
+   * @param senderEmail email config to be checked
+   * @return Server response value
+   */
+  ResponseResult checkEmail(SenderEmail senderEmail);
+
+  /**
+   * update docker config
+   *
+   * @param senderEmail email config needs to be updated
+   * @return Whether the update operation was successful
+   */
+  boolean updateEmail(SenderEmail senderEmail);
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
index 37c09e9e1..ffcafc27e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
@@ -523,7 +523,7 @@ public class AppBuildPipeServiceImpl
             DockerConf.of(
                 dockerConfig.getAddress(),
                 dockerConfig.getNamespace(),
-                dockerConfig.getUser(),
+                dockerConfig.getUsername(),
                 dockerConfig.getPassword()),
             app.getIngressTemplate());
     return k8sApplicationBuildRequest;
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
index bba0b91e3..3d49aad13 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/SettingServiceImpl.java
@@ -19,6 +19,8 @@ package org.apache.streampark.console.core.service.impl;
 
 import org.apache.streampark.console.core.bean.DockerConfig;
 import org.apache.streampark.console.core.bean.MavenConfig;
+import org.apache.streampark.console.core.bean.ResponseResult;
+import org.apache.streampark.console.core.bean.SenderEmail;
 import org.apache.streampark.console.core.entity.Setting;
 import org.apache.streampark.console.core.mapper.SettingMapper;
 import org.apache.streampark.console.core.service.SettingService;
@@ -27,14 +29,27 @@ import org.apache.commons.lang3.StringUtils;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.model.AuthConfig;
+import com.github.dockerjava.api.model.AuthResponse;
+import com.github.dockerjava.core.DefaultDockerClientConfig;
+import com.github.dockerjava.core.DockerClientConfig;
+import com.github.dockerjava.core.DockerClientImpl;
+import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
+import com.github.dockerjava.transport.DockerHttpClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
 
+import java.util.List;
 import java.util.Optional;
+import java.util.Properties;
 
 @Slf4j
 @Service
@@ -101,4 +116,119 @@ public class SettingServiceImpl extends 
ServiceImpl<SettingMapper, Setting>
         .getOrDefault(SettingService.KEY_INGRESS_MODE_DEFAULT, emptySetting)
         .getSettingValue();
   }
+
+  @Override
+  public ResponseResult checkDocker(DockerConfig dockerConfig) {
+    DockerClientConfig config =
+        DefaultDockerClientConfig.createDefaultConfigBuilder()
+            .withRegistryUrl(dockerConfig.getAddress())
+            .build();
+
+    DockerHttpClient httpClient =
+        new 
ApacheDockerHttpClient.Builder().dockerHost(config.getDockerHost()).build();
+
+    ResponseResult result = new ResponseResult();
+
+    try (DockerClient dockerClient = DockerClientImpl.getInstance(config, 
httpClient)) {
+      AuthConfig authConfig =
+          new AuthConfig()
+              .withUsername(dockerConfig.getUsername())
+              .withPassword(dockerConfig.getPassword())
+              .withRegistryAddress(dockerConfig.getAddress());
+      AuthResponse response = 
dockerClient.authCmd().withAuthConfig(authConfig).exec();
+      if (response.getStatus().equals("Login Succeeded")) {
+        result.setStatus(200);
+      } else {
+        result.setStatus(500);
+        result.setMsg("docker login failed, status: " + response.getStatus());
+      }
+    } catch (Exception e) {
+      if (e.getMessage().contains("LastErrorException")) {
+        result.setStatus(400);
+      } else if (e.getMessage().contains("Status 401")) {
+        result.setStatus(500);
+        result.setMsg(
+            "Failed to validate Docker registry, unauthorized: incorrect 
username or password ");
+      } else {
+        result.setStatus(500);
+        result.setMsg("Failed to validate Docker registry, error: " + 
e.getMessage());
+      }
+    }
+    return result;
+  }
+
+  @Override
+  public boolean updateDocker(DockerConfig dockerConfig) {
+    List<Setting> settings = DockerConfig.toSettings(dockerConfig);
+    for (Setting each : settings) {
+      if (!update(each)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public SenderEmail getSenderEmail() {
+    try {
+      String host = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_HOST).getSettingValue();
+      String port = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_PORT).getSettingValue();
+      String from = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_FROM).getSettingValue();
+      String userName = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_USERNAME).getSettingValue();
+      String password = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_PASSWORD).getSettingValue();
+      String ssl = 
SETTINGS.get(SettingService.KEY_ALERT_EMAIL_SSL).getSettingValue();
+
+      SenderEmail senderEmail = new SenderEmail();
+      senderEmail.setHost(host);
+      if (StringUtils.isNotBlank(port)) {
+        senderEmail.setPort(Integer.parseInt(port));
+      }
+      senderEmail.setFrom(from);
+      senderEmail.setUserName(userName);
+      senderEmail.setPassword(password);
+      if (StringUtils.isNotBlank(ssl)) {
+        senderEmail.setSsl(Boolean.parseBoolean(ssl));
+      }
+      return senderEmail;
+    } catch (Exception e) {
+      log.warn("Fault Alert Email is not set.");
+    }
+    return null;
+  }
+
+  @Override
+  public ResponseResult checkEmail(SenderEmail senderEmail) {
+    ResponseResult result = new ResponseResult();
+    Properties props = new Properties();
+    props.put("mail.smtp.auth", "true");
+    if (senderEmail.isSsl()) {
+      props.put("mail.smtp.starttls.enable", "true");
+    }
+    props.put("mail.smtp.host", senderEmail.getHost());
+    props.put("mail.smtp.port", senderEmail.getPort());
+
+    Session session = Session.getInstance(props);
+    try {
+      Transport transport = session.getTransport("smtp");
+      transport.connect(
+          senderEmail.getHost(), senderEmail.getUserName(), 
senderEmail.getPassword());
+      transport.close();
+      result.setStatus(200);
+    } catch (MessagingException e) {
+      result.setStatus(500);
+      result.setMsg("connect to target mail server failed: " + e.getMessage());
+    }
+    return result;
+  }
+
+  @Override
+  public boolean updateEmail(SenderEmail senderEmail) {
+    List<Setting> settings = SenderEmail.toSettings(senderEmail);
+    for (Setting each : settings) {
+      if (!update(each)) {
+        return false;
+      }
+    }
+    return true;
+  }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
 
b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
index d418c26e2..3434335ff 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
+++ 
b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
@@ -282,8 +282,8 @@ insert into `t_setting` values (10, 'alert.email.ssl', 
'false', 'Alert Email Is
 insert into `t_setting` values (11, 'docker.register.address', null, 'Docker 
Register Address', 'Docker container service address', 1);
 insert into `t_setting` values (12, 'docker.register.user', null, 'Docker 
Register User', 'Docker container service authentication username', 1);
 insert into `t_setting` values (13, 'docker.register.password', null, 'Docker 
Register Password', 'Docker container service authentication password', 1);
-insert into `t_setting` values (14, 'docker.register.namespace', null, 
'Namespace for docker image used in docker building env and target image 
register', 'Docker namespace', 1);
-insert into `t_setting` values (15, 'ingress.mode.default', null, 
'Automatically generate an nginx-based ingress by passing in a domain name', 
'Ingress domain address', 1);
+insert into `t_setting` values (14, 'docker.register.namespace', null, 'Docker 
namespace', 'Namespace for docker image used in docker building env and target 
image register', 1);
+insert into `t_setting` values (15, 'ingress.mode.default', null, 'Ingress 
domain address', 'Automatically generate an nginx-based ingress by passing in a 
domain name', 1);
 
 -- ----------------------------
 -- Records of t_user
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
new file mode 100644
index 000000000..eb744fe07
--- /dev/null
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/SettingServiceTest.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.streampark.console.core.service;
+
+import org.apache.streampark.console.SpringUnitTestBase;
+import org.apache.streampark.console.core.bean.DockerConfig;
+import org.apache.streampark.console.core.bean.ResponseResult;
+import org.apache.streampark.console.core.bean.SenderEmail;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Disabled("'ese test cases can't be runnable due to external service is not 
available.")
+class SettingServiceTest extends SpringUnitTestBase {
+
+  @Autowired SettingService settingService;
+
+  @Test
+  void testUpdateDockerConfigTest() {
+    DockerConfig dockerConfig = new DockerConfig();
+    dockerConfig.setUsername("test-username-setting-value");
+    dockerConfig.setPassword("test-password-setting-value");
+    dockerConfig.setNamespace("test-namespace-setting-value");
+    dockerConfig.setAddress("test-address-setting-value");
+
+    settingService.updateDocker(dockerConfig);
+
+    Assertions.assertEquals(
+        "test-address-setting-value",
+        
settingService.get(SettingService.KEY_DOCKER_REGISTER_ADDRESS).getSettingValue());
+    Assertions.assertEquals(
+        "test-username-setting-value",
+        
settingService.get(SettingService.KEY_DOCKER_REGISTER_USER).getSettingValue());
+    Assertions.assertEquals(
+        "test-password-setting-value",
+        
settingService.get(SettingService.KEY_DOCKER_REGISTER_PASSWORD).getSettingValue());
+    Assertions.assertEquals(
+        "test-namespace-setting-value",
+        
settingService.get(SettingService.KEY_DOCKER_REGISTER_NAMESPACE).getSettingValue());
+  }
+
+  @Test
+  void testUpdateAlertEmailConfigTest() {
+    SenderEmail senderEmail = new SenderEmail();
+    senderEmail.setHost("test-host-setting-value");
+    senderEmail.setUserName("test-username-setting-value");
+    senderEmail.setPassword("test-password-setting-value");
+    senderEmail.setFrom("test-from-setting-value");
+    senderEmail.setSsl(true);
+    senderEmail.setPort(456);
+
+    settingService.updateEmail(senderEmail);
+
+    Assertions.assertEquals(
+        "test-host-setting-value",
+        
settingService.get(SettingService.KEY_ALERT_EMAIL_HOST).getSettingValue());
+    Assertions.assertEquals(
+        "test-from-setting-value",
+        
settingService.get(SettingService.KEY_ALERT_EMAIL_FROM).getSettingValue());
+    Assertions.assertEquals(
+        "test-username-setting-value",
+        
settingService.get(SettingService.KEY_ALERT_EMAIL_USERNAME).getSettingValue());
+    Assertions.assertEquals(
+        "test-password-setting-value",
+        
settingService.get(SettingService.KEY_ALERT_EMAIL_PASSWORD).getSettingValue());
+    Assertions.assertEquals(
+        "456", 
settingService.get(SettingService.KEY_ALERT_EMAIL_PORT).getSettingValue());
+    Assertions.assertEquals(
+        "true", 
settingService.get(SettingService.KEY_ALERT_EMAIL_SSL).getSettingValue());
+  }
+
+  @Test
+  void checkEmailTest() {
+    SenderEmail senderEmail = new SenderEmail();
+    senderEmail.setHost("smtp.163.com");
+    senderEmail.setUserName("[email protected]");
+    senderEmail.setPassword("XXXXXXXX");
+    senderEmail.setFrom("[email protected]");
+    senderEmail.setSsl(false);
+    senderEmail.setPort(25);
+    ResponseResult result = settingService.checkEmail(senderEmail);
+    Assertions.assertEquals(result.getStatus(), 200);
+  }
+
+  @Test
+  void checkDockerTest() {
+    String username = "XXXXXXXX ";
+    String password = "XXXXXXXX";
+
+    DockerConfig dockerConfig = new DockerConfig();
+    dockerConfig.setAddress("registry.cn-hangzhou.aliyuncs.com");
+    dockerConfig.setUsername(username);
+    dockerConfig.setPassword(password);
+    dockerConfig.setNamespace("streampark");
+
+    ResponseResult result = settingService.checkDocker(dockerConfig);
+    Assertions.assertEquals(result.getStatus(), 200);
+  }
+}


Reply via email to