| zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-flow/src/page/settings/SecuritySettings.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
@@ -2,10 +2,8 @@ import com.zy.acs.framework.common.Cools; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Optional; import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.function.BiConsumer; import java.util.function.Function; @@ -292,4 +290,33 @@ return snakeCaseField + (order.isEmpty() ? "" : " " + order); } public static String processTemplate(String template, Map<String, Object> params) { if (template == null || params == null) { return template; } String processed = template; for (Map.Entry<String, Object> entry : params.entrySet()) { processed = processed.replace("${" + entry.getKey() + "}", entry.getValue().toString()); } 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(); } } zy-acs-flow/src/page/settings/SecuritySettings.jsx
@@ -114,10 +114,10 @@ defaultValue="" rules={{ required: translate('ra.validation.required'), pattern: { value: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d\.]{6,13}$/, message: translate('page.settings.resetPwd.tip.pwdInputLimit'), }, // pattern: { // value: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d\.]{6,13}$/, // message: translate('page.settings.resetPwd.tip.pwdInputLimit'), // }, validate: (value) => { if (value === oldPasswordVal) { return translate('page.settings.resetPwd.tip.pwdNotSameAsOld'); zy-acs-manager/src/main/java/com/zy/acs/manager/common/service/EmailService.java
New file @@ -0,0 +1,74 @@ package com.zy.acs.manager.common.service; import com.alibaba.fastjson.JSON; import com.zy.acs.common.utils.Utils; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.system.enums.EmailType; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @Slf4j @Service public class EmailService { private static final String EMAIL_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"; // @Value("${spring.mail.username}") private String from; // @Autowired // @SuppressWarnings("all") // private JavaMailSender mailSender; public boolean sendEmail(String to, EmailType emailType, Map<String, Object> param) { String subject = emailType.subject; String content = emailType.content; if (!Cools.isEmpty(param) && !param.isEmpty()) { content = Utils.processTemplate(content, param); } boolean sendRes = this.send(this.from, to, subject, content); if (sendRes) { log.info("Email sent successfully. To: {}, Subject: {}, Parameter: {}" , to , subject , JSON.toJSONString(param)); } return sendRes; } public boolean send(String from, String to, String subject, String content) { // try { // MimeMessage message = mailSender.createMimeMessage(); // message.setFrom(from); // // MimeMessageHelper helper = new MimeMessageHelper(message, true); // helper.setTo(to); // helper.setSubject(subject); // helper.setText(content); // // mailSender.send(message); // return true; // } catch (MailException | MessagingException e) { // log.error(this.getClass().getSimpleName(), e); // return false; // } return true; } public boolean isValid(String email) { if (Cools.isEmpty(email)) { return false; } Pattern pattern = Pattern.compile(EMAIL_REGEX); Matcher matcher = pattern.matcher(email); return matcher.matches(); } } zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
@@ -1,12 +1,14 @@ package com.zy.acs.manager.system.controller; import com.zy.acs.common.utils.Utils; import com.zy.acs.framework.common.BaseRes; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.R; import com.zy.acs.manager.common.annotation.OperationLog; import com.zy.acs.manager.common.config.ConfigProperties; import com.zy.acs.manager.common.domain.BusinessRes; import com.zy.acs.manager.common.security.JwtSubject; import com.zy.acs.manager.common.service.EmailService; import com.zy.acs.manager.common.utils.JwtUtil; import com.zy.acs.manager.manager.enums.StatusType; import com.zy.acs.manager.system.controller.param.LoginParam; @@ -21,7 +23,7 @@ import com.zy.acs.manager.system.service.TenantService; import com.zy.acs.manager.system.service.UserLoginService; import com.zy.acs.manager.system.service.UserService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -48,6 +50,8 @@ private RoleMenuService roleMenuService; @Resource private TenantService tenantService; @Autowired private EmailService emailService; @GetMapping("/system/info") public R systemInfo() { @@ -106,10 +110,10 @@ if (!emailService.isValid(user.getEmail())) { return R.parse(BusinessRes.INVALID_EMAIL); } User one = userService.getByEmail(user.getEmail(), null); if (null != one && !one.getId().equals(user.getId())) { return R.parse(BusinessRes.EMAIL_EXIT); } // User one = userService.getByEmail(user.getEmail(), null); // if (null != one && !one.getId().equals(user.getId())) { // return R.parse(BusinessRes.EMAIL_EXIT); // } } if (userService.updateById(user)) { return R.ok("Save Success").add(userService.getById(user.getId())); zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/param/UpdatePasswordParam.java
@@ -11,6 +11,6 @@ private String oldPassword; private String password; private String newPassword; } zy-acs-manager/src/main/java/com/zy/acs/manager/system/enums/EmailType.java
New file @@ -0,0 +1,18 @@ package com.zy.acs.manager.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; } }