From 1ed1752f678f769e43e9faa34809701850c7f727 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期四, 30 三月 2023 19:14:38 +0800
Subject: [PATCH] update 优化 验证码有效期 迁移到数据库 参数管理内

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java |   46 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java
index ab9c4d1..fec91b9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java
@@ -3,20 +3,22 @@
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.captcha.AbstractCaptcha;
 import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
-import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.constant.GlobalConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.SpringUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.reflect.ReflectUtils;
+import com.ruoyi.common.mail.config.properties.MailProperties;
+import com.ruoyi.common.mail.utils.MailUtils;
 import com.ruoyi.common.redis.utils.RedisUtils;
-import com.ruoyi.common.sms.config.properties.SmsProperties;
 import com.ruoyi.common.sms.core.SmsTemplate;
 import com.ruoyi.common.sms.entity.SmsResult;
 import com.ruoyi.common.web.config.properties.CaptchaProperties;
 import com.ruoyi.common.web.enums.CaptchaType;
+import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.web.domain.vo.CaptchaVo;
 import jakarta.validation.constraints.NotBlank;
 import lombok.RequiredArgsConstructor;
@@ -45,7 +47,9 @@
 public class CaptchaController {
 
     private final CaptchaProperties captchaProperties;
-    private final SmsProperties smsProperties;
+    private final MailProperties mailProperties;
+    private final ISysConfigService configService;
+
 
     /**
      * 鐭俊楠岃瘉鐮�
@@ -53,16 +57,16 @@
      * @param phonenumber 鐢ㄦ埛鎵嬫満鍙�
      */
     @GetMapping("/sms/code")
-    public R<Void> smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}")
-                              String phonenumber) {
-        if (!smsProperties.getEnabled()) {
+    public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
+        if (!Convert.toBool(configService.selectConfigByKey("sys.account.smsEnabled"))) {
             return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒");
         }
         String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
         String code = RandomUtil.randomNumbers(4);
-        RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+        Integer captchaExpired = Convert.toInt(configService.selectConfigByKey("sys.account.captchaExpired"));
+        RedisUtils.setCacheObject(key, code, Duration.ofMinutes(captchaExpired));
         // 楠岃瘉鐮佹ā鏉縤d 鑷澶勭悊 (鏌ユ暟鎹簱鎴栧啓姝诲潎鍙�)
-        String templateId = "";
+        String templateId = configService.selectConfigByKey("sys.account.templateId");
         Map<String, String> map = new HashMap<>(1);
         map.put("code", code);
         SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
@@ -70,6 +74,29 @@
         if (!result.isSuccess()) {
             log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", result);
             return R.fail(result.getMessage());
+        }
+        return R.ok();
+    }
+
+    /**
+     * 閭楠岃瘉鐮�
+     *
+     * @param email 閭
+     */
+    @GetMapping("/email/code")
+    public R<Void> emailCode(@NotBlank(message = "{user.email.not.blank}") String email) {
+        if (!mailProperties.getEnabled()) {
+            return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚偖绠卞姛鑳斤紒");
+        }
+        String key = GlobalConstants.CAPTCHA_CODE_KEY + email;
+        String code = RandomUtil.randomNumbers(4);
+        Integer captchaExpired = Convert.toInt(configService.selectConfigByKey("sys.account.captchaExpired"));
+        RedisUtils.setCacheObject(key, code, Duration.ofMinutes(captchaExpired));
+        try {
+            MailUtils.sendText(email, "鐧诲綍楠岃瘉鐮�", "鎮ㄦ湰娆¢獙璇佺爜涓猴細%s锛屾湁鏁堟�т负%d鍒嗛挓锛岃灏藉揩濉啓銆�".formatted(code, captchaExpired));
+        } catch (Exception e) {
+            log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", e.getMessage());
+            return R.fail(e.getMessage());
         }
         return R.ok();
     }
@@ -102,7 +129,8 @@
             Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
             code = exp.getValue(String.class);
         }
-        RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+        Integer captchaExpired = Convert.toInt(configService.selectConfigByKey("sys.account.captchaExpired"));
+        RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(captchaExpired));
         captchaVo.setUuid(uuid);
         captchaVo.setImg(captcha.getImageBase64());
         return R.ok(captchaVo);

--
Gitblit v1.9.3