Quellcode durchsuchen

增加重置gitlab密码功能

icenaked vor 3 Jahren
Ursprung
Commit
8fbc0434f3

+ 4 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/GitlabService.java

@@ -21,4 +21,8 @@ public class GitlabService {
     public GitlabUserVO createGitlabUser(int userId, String username, String password, String email) throws SeecoderGitlabException {
         return client.createGitlabUser(userId, username, password, email);
     }
+
+    public boolean changePassword(int userId, String password) throws SeecoderGitlabException {
+        return client.changePassword(userId, password);
+    }
 }

+ 19 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/UserService.java

@@ -143,6 +143,25 @@ public class UserService {
         log.debug("Reset Password for User: {}", savedUser);
     }
 
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void resetGitlabPassword(String phone, String phoneCode, String password) {
+        checkPhoneMessageOrThrowError(phone, phoneCode);
+
+        User user = userRepository
+                .findByPhone(phone)
+                .<UsernameNotFoundException>orElseThrow(() -> {
+                    // TODO: use customException
+                    throw new UsernameNotFoundException("找不到手机用户[" + phone + "]");
+                });
+        User savedUser = userRepository.save(user);
+        try {
+            gitlabService.changePassword(Math.toIntExact(savedUser.getId()),password);
+        } catch (SeecoderGitlabException e) {
+            throw new CustomErrorException("gitlab密码重置失败,请联系管理人员!");
+        }
+        log.debug("Reset Password for User: {}", savedUser);
+    }
+
     private void checkPhoneMessageOrThrowError(String phone, String phoneCode) {
         if (!aliService.checkPhoneMessage(phone, phoneCode)) {
             throw CustomErrorException.phoneVerificationNotMatch();

+ 10 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/UserController.java

@@ -87,6 +87,16 @@ public class UserController {
         return OkResponse.of(true);
     }
 
+    @PostMapping("/resetGitlabPassword")
+    public OkResponse<Boolean> resetGitlabPassword(@RequestBody ResetPasswordDTO resetPasswordDTO) {
+        userService.resetPassword(
+                resetPasswordDTO.getPhone(),
+                resetPasswordDTO.getIdentifyCode(),
+                resetPasswordDTO.getPassword()
+        );
+        return OkResponse.of(true);
+    }
+
     @GetMapping("/findIdByPhone/{phone}")
     public OkResponse<Long> findIdByPhone(@PathVariable String phone) {
         return OkResponse.of(userService.findIdByPhone(phone));