diff --git a/src/main/java/org/cmh/backend/authentication/controller/AuthenticationController.java b/src/main/java/org/cmh/backend/authentication/controller/AuthenticationController.java index 1895856..a7fa29a 100644 --- a/src/main/java/org/cmh/backend/authentication/controller/AuthenticationController.java +++ b/src/main/java/org/cmh/backend/authentication/controller/AuthenticationController.java @@ -1,9 +1,6 @@ package org.cmh.backend.authentication.controller; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; import org.cmh.backend.Utils.JwtUtil; import org.cmh.backend.authentication.dto.*; import org.cmh.backend.authentication.model.UserHS; @@ -13,8 +10,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.time.LocalDateTime; - @RestController class AuthenticationController { @@ -86,5 +81,15 @@ class AuthenticationController { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } + @PostMapping("/changePassword") + public ResponseEntity changePassword(@RequestBody ChangePasswordRequest changePasswordRequest) { + if (JwtUtil.isTokenValid(changePasswordRequest.getToken())) { + if (userService.changePassword(JwtUtil.extractUsername(changePasswordRequest.getToken()), changePasswordRequest)) { + return new ResponseEntity<>(HttpStatus.OK); + } + } + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } diff --git a/src/main/java/org/cmh/backend/authentication/dto/ChangePasswordRequest.java b/src/main/java/org/cmh/backend/authentication/dto/ChangePasswordRequest.java new file mode 100644 index 0000000..5768562 --- /dev/null +++ b/src/main/java/org/cmh/backend/authentication/dto/ChangePasswordRequest.java @@ -0,0 +1,11 @@ +package org.cmh.backend.authentication.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ChangePasswordRequest extends JwtRequest{ + private String currentPassword; + private String newPassword; +} diff --git a/src/main/java/org/cmh/backend/authentication/service/UserService.java b/src/main/java/org/cmh/backend/authentication/service/UserService.java index a901360..bcb93c9 100644 --- a/src/main/java/org/cmh/backend/authentication/service/UserService.java +++ b/src/main/java/org/cmh/backend/authentication/service/UserService.java @@ -1,5 +1,6 @@ package org.cmh.backend.authentication.service; +import org.cmh.backend.authentication.dto.ChangePasswordRequest; import org.cmh.backend.authentication.dto.ManageUserProfileRequest; import org.cmh.backend.authentication.model.UserHS; import org.cmh.backend.authentication.repository.UserRepository; @@ -67,17 +68,35 @@ public class UserService { user.setEmail(request.getEmail()); user.setDepartment(request.getDepartment()); user.setRole(request.getRole()); - try{ + try { userRepository.save(user); - } - catch (Exception e) { + } catch (Exception e) { return false; } return true; } else { return false; } -} + } + + public boolean changePassword(String username, ChangePasswordRequest request) { + UserHS user = userRepository.findByUsername(username); + if (user != null) { + if (passwordEncoder.matches(request.getCurrentPassword(), user.getPassword())) { + if (isValidPassword(request.getNewPassword())) { + String encodedPassword = passwordEncoder.encode(request.getNewPassword()); + user.setPassword(encodedPassword); + try { + userRepository.save(user); + } catch (Exception e) { + return false; + } + return true; + } + } + } + return false; + } // 验证用户名格式