|  |  | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 认证控制器 | 
 |  |  |  * | 
 |  |  |  * Authority Controller | 
 |  |  |  * Created by vincent on 1/30/2024 | 
 |  |  |  */ | 
 |  |  | @RestController | 
 |  |  | 
 |  |  |  | 
 |  |  |     @PostMapping("/login") | 
 |  |  |     public R login(@RequestBody LoginParam param, HttpServletRequest request) { | 
 |  |  | //        System.out.println(userService.encodePassword("123456")); | 
 |  |  |         String username = param.getUsername(); | 
 |  |  |         Long tenantId = param.getTenantId(); | 
 |  |  |         User user = userService.getByUsername(username, tenantId); | 
 |  |  |         User user = userService.getByUsername(username | 
 |  |  |                 , configProperties.getSystemMode() | 
 |  |  |                         .equals(SystemModeType.OFFLINE) ? param.getTenantId() : null | 
 |  |  |         ); | 
 |  |  |         if (user == null) { | 
 |  |  |             return R.error("Username Does Not Exist"); | 
 |  |  |             return R.parse(BusinessRes.USERNAME_NOT_EXIST); | 
 |  |  |         } | 
 |  |  |         if (!user.getStatus().equals(StatusType.ENABLE.val)) { | 
 |  |  |             return R.error("Account Frozen"); | 
 |  |  |             return R.parse(BusinessRes.USERNAME_FROZEN); | 
 |  |  |         } | 
 |  |  |         if (!userService.comparePassword(user.getPassword(), param.getPassword())) { | 
 |  |  |             return R.error("Invalid Password"); | 
 |  |  |             return R.parse(BusinessRes.INVALID_PASSWORD); | 
 |  |  |         } | 
 |  |  |         String accessToken = JwtUtil.buildToken(new JwtSubject(username, user.getTenantId()), | 
 |  |  |                 configProperties.getTokenExpireTime(), configProperties.getTokenKey()); | 
 |  |  |         userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request); | 
 |  |  |         userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, user.getTenantId(), null, request); | 
 |  |  |         Tenant tenant = tenantService.getById(user.getTenantId()); | 
 |  |  |         return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName())); | 
 |  |  |     } | 
 |  |  | 
 |  |  |             return R.parse(BaseRes.PARAM); | 
 |  |  |         } | 
 |  |  |         if (!emailService.isValid(email)) { | 
 |  |  |             return R.error("Please enter a valid email address."); | 
 |  |  |             return R.parse(BusinessRes.INVALID_EMAIL); | 
 |  |  |         } | 
 |  |  |         if (null != userService.getByEmail(email, null)) { | 
 |  |  |             return R.error("Email Already Exist"); | 
 |  |  |             return R.parse(BusinessRes.EMAIL_EXIT); | 
 |  |  |         } | 
 |  |  |         Long expire = redisService.getExpire(EmailType.REGISTER_VERIFY.toString(), email); | 
 |  |  |         if (expire > (configProperties.getCodeTime() - 60)) { | 
 |  |  | 
 |  |  |                 return R.error("The verification code is incorrect."); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // register | 
 |  |  |         TenantInitParam initParam = new TenantInitParam(); | 
 |  |  |         initParam.setEmail(param.getEmail()); | 
 |  |  | 
 |  |  |         initParam.setPassword(param.getPassword()); | 
 |  |  |         initParam.setName(param.getUsername()); | 
 |  |  |         initParam.setFlag(param.getUsername()); | 
 |  |  |         if (!tenantService.initTenant(initParam)) { | 
 |  |  |         Long tenantId = tenantService.initTenant(initParam); | 
 |  |  |         if (null == tenantId) { | 
 |  |  |             throw new CoolException("Failed to register"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         redisService.delete(EmailType.REGISTER_VERIFY.toString(), param.getEmail()); | 
 |  |  |         return R.ok(); | 
 |  |  |         // token | 
 |  |  |         User user = userService.getByUsername(param.getUsername(), tenantId); | 
 |  |  |         String accessToken = JwtUtil.buildToken(new JwtSubject(user.getUsername(), user.getTenantId()), | 
 |  |  |                 configProperties.getTokenExpireTime(), configProperties.getTokenKey()); | 
 |  |  |         userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request); | 
 |  |  |         Tenant tenant = tenantService.getById(user.getTenantId()); | 
 |  |  |         return R.ok("Sign Up Success").add(new LoginResult(accessToken, user, tenant.getName())); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @GetMapping("/system/info") | 
 |  |  |     public R systemInfo() { | 
 |  |  |         SystemModeType systemMode = configProperties.getSystemMode(); | 
 |  |  |         SystemInfoVo infoVo = new SystemInfoVo(); | 
 |  |  |         infoVo.setName(configProperties.getSystemName()); | 
 |  |  |         infoVo.setVersion(configProperties.getSystemVersion()); | 
 |  |  |         infoVo.setMode(systemMode.toString()); | 
 |  |  |         infoVo.setMode(configProperties.getSystemMode().toString()); | 
 |  |  |         return R.ok(infoVo); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         user.setEmailVerified(null); | 
 |  |  |         user.setTenantId(null); | 
 |  |  |         user.setStatus(null); | 
 |  |  |         if (!Cools.isEmpty(user.getEmail())) { | 
 |  |  |             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); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (userService.updateById(user)) { | 
 |  |  |             return R.ok("Save Success").add(userService.getById(user.getId())); | 
 |  |  |         } | 
 |  |  | 
 |  |  |     @PostMapping("/auth/reset/password") | 
 |  |  |     public R resetPassword(@RequestBody UpdatePasswordParam param) { | 
 |  |  |         if (Cools.isEmpty(param.getOldPassword(), param.getNewPassword())) { | 
 |  |  |             return R.error("Parameters Cannot Be Empty"); | 
 |  |  |             return R.parse(BaseRes.PARAM); | 
 |  |  |         } | 
 |  |  |         Long userId = getLoginUserId(); | 
 |  |  |         if (userId == null) { |