From 71eeac34fee9f5a53168e0872e5fb7b855c0b4c8 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@gmail.com>
Date: 星期三, 12 二月 2025 21:22:55 +0800
Subject: [PATCH] #

---
 rsf-common/src/main/java/com/vincent/rsf/common/utils/Utils.java                           |   19 ++++++
 rsf-server/src/main/java/com/vincent/rsf/server/common/service/EmailService.java           |    6 +
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java      |   26 ++++++--
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/RegisterParam.java |   23 +++++++
 rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java        |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java        |    5 +
 rsf-server/src/main/resources/application.yml                                              |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/system/enums/EmailType.java                |   18 ++++++
 rsf-server/src/main/resources/application-dev.yml                                          |   28 ++++++--
 9 files changed, 113 insertions(+), 17 deletions(-)

diff --git a/rsf-common/src/main/java/com/vincent/rsf/common/utils/Utils.java b/rsf-common/src/main/java/com/vincent/rsf/common/utils/Utils.java
index 06a5b0b..6123a36 100644
--- a/rsf-common/src/main/java/com/vincent/rsf/common/utils/Utils.java
+++ b/rsf-common/src/main/java/com/vincent/rsf/common/utils/Utils.java
@@ -6,6 +6,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
 import java.util.Map;
@@ -304,4 +305,22 @@
         return processed;
     }
 
+    public static String randomNumbers(int length) {
+        String baseString = "0123456789";
+
+        if (length < 1) {
+            length = 1;
+        }
+
+        StringBuilder sb = new StringBuilder(length);
+        int baseLength = baseString.length();
+
+        for(int i = 0; i < length; ++i) {
+            int number = ThreadLocalRandom.current().nextInt(baseLength);
+            sb.append(baseString.charAt(number));
+        }
+
+        return sb.toString();
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
index 4a2d3fc..2a0e7ae 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
@@ -55,6 +55,11 @@
      */
     private String superUsername;
 
+    /**
+     * 楠岃瘉鐮侀暱搴�
+     */
+    private Integer codeLength = 4;
+
     public List<String> getSuperUserList() {
         return Arrays.stream(superUsername.split(",")).collect(Collectors.toList());
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
index f1e3471..7c31298 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
@@ -38,7 +38,9 @@
             "/test/**",
             "/system/info",
             "/tenant/list",
+            "/email/code",
             "/login",
+            "/register",
             "/druid/**",
             "/swagger-ui.html",
             "/swagger-resources/**",
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/service/EmailService.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/service/EmailService.java
index 3c33cfd..fa55f03 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/service/EmailService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/service/EmailService.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.vincent.rsf.common.utils.Utils;
 import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.server.system.enums.EmailType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -28,9 +29,10 @@
     @SuppressWarnings("all")
     private JavaMailSender mailSender;
 
-    public boolean sendEmail(String to, String subject, Map<String, Object> param) {
+    public boolean sendEmail(String to, EmailType emailType, Map<String, Object> param) {
 
-        String content = "Your verification code is: ${code}";
+        String subject = emailType.subject;
+        String content = emailType.content;
         if (!Cools.isEmpty(param) && !param.isEmpty()) {
             content = Utils.processTemplate(content, param);
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
index 7149435..0eca7ad 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
@@ -2,6 +2,7 @@
 
 import com.vincent.rsf.common.enums.SystemModeType;
 import com.vincent.rsf.common.utils.Utils;
+import com.vincent.rsf.framework.common.BaseRes;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.common.annotation.OperationLog;
@@ -10,6 +11,7 @@
 import com.vincent.rsf.server.common.service.EmailService;
 import com.vincent.rsf.server.common.utils.JwtUtil;
 import com.vincent.rsf.server.system.controller.param.LoginParam;
+import com.vincent.rsf.server.system.controller.param.RegisterParam;
 import com.vincent.rsf.server.system.controller.param.UpdatePasswordParam;
 import com.vincent.rsf.server.system.controller.result.LoginResult;
 import com.vincent.rsf.server.system.controller.result.MenuVo;
@@ -18,16 +20,14 @@
 import com.vincent.rsf.server.system.entity.Tenant;
 import com.vincent.rsf.server.system.entity.User;
 import com.vincent.rsf.server.system.entity.UserLogin;
+import com.vincent.rsf.server.system.enums.EmailType;
 import com.vincent.rsf.server.system.enums.StatusType;
 import com.vincent.rsf.server.system.service.RoleMenuService;
 import com.vincent.rsf.server.system.service.TenantService;
 import com.vincent.rsf.server.system.service.UserLoginService;
 import com.vincent.rsf.server.system.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -58,8 +58,6 @@
     @PostMapping("/login")
     public R login(@RequestBody LoginParam param, HttpServletRequest request) {
 //        System.out.println(userService.encodePassword("123456"));
-        emailService.sendEmail("t1341870251@gmail.com", "Email Verification Code", Cools.add("code", "666"));
-
         String username = param.getUsername();
         Long tenantId = param.getTenantId();
         User user = userService.getByUsername(username, tenantId);
@@ -79,6 +77,22 @@
         return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName()));
     }
 
+    @GetMapping("/email/code")
+    public R emailCode(@RequestParam("email") String email) {
+        if (Cools.isEmpty(email)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        String code = Utils.randomNumbers(configProperties.getCodeLength());
+        emailService.sendEmail(email, EmailType.REGISTER_VERIFY, Cools.add("code", code));
+        return R.ok();
+    }
+
+    @PostMapping("/register")
+    public R register(@RequestBody RegisterParam param, HttpServletRequest request) {
+
+        return R.ok();
+    }
+
     @GetMapping("/system/info")
     public R systemInfo() {
         SystemModeType systemMode = configProperties.getSystemMode();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/RegisterParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/RegisterParam.java
new file mode 100644
index 0000000..351d82d
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/RegisterParam.java
@@ -0,0 +1,23 @@
+package com.vincent.rsf.server.system.controller.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by vincent on 1/30/2024
+ */
+@Data
+public class RegisterParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String email;
+
+    private String username;
+
+    private String password;
+
+    private String code;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/EmailType.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/EmailType.java
new file mode 100644
index 0000000..bd11f60
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/EmailType.java
@@ -0,0 +1,18 @@
+package com.vincent.rsf.server.system.enums;
+
+public enum EmailType {
+
+    LOGIN_VERIFY("Email Verification Code", "Your verification code is: ${code}."),
+    REGISTER_VERIFY("Email Verification Code", "Your verification code is: ${code}."),
+    FORGET_PASSWORD("Email Verification Code", "Your verification code is: ${code}."),
+    ;
+
+    public final String subject;
+    public final String content;
+
+    EmailType(String subject, String content) {
+        this.subject = subject;
+        this.content = content;
+    }
+
+}
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 4c4c204..ea93e7e 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -44,18 +44,30 @@
   jmx:
     enabled: false
   mail:
-    from: t1731253606@163.com
-    host: smtp.163.com
-    port: 465
-    username: t1731253606@163.com
-    password: FCqETysH8TfuPqkY
+    # 163
+#    from: t1731253606@163.com
+#    host: smtp.163.com
+#    port: 465
+#    username: t1731253606@163.com
+#    password: FCqETysH8TfuPqkY
+#    properties:
+#      mail:
+#        smtp:
+#          auth: true
+#          ssl: true
+#          socketFactory:
+#            class: javax.net.ssl.SSLSocketFactory
+    # gmail
+    from: whatsflow.team@gmail.com
+    host: smtp.gmail.com
+    port: 587
+    username: whatsflow.team@gmail.com
+    password: elpc vfwk twnu uoyy
     properties:
       mail:
         smtp:
           auth: true
-          ssl: true
-          socketFactory:
-            class: javax.net.ssl.SSLSocketFactory
+          starttls.enable: true
 
 redis:
   host: 127.0.0.1
diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml
index 7008f3e..8533730 100644
--- a/rsf-server/src/main/resources/application.yml
+++ b/rsf-server/src/main/resources/application.yml
@@ -32,4 +32,5 @@
   system-version: @pom.version@
   system-mode: OFFLINE
   token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
-  super-username: root
\ No newline at end of file
+  super-username: root
+  code-length: 6
\ No newline at end of file

--
Gitblit v1.9.1