UserController.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.danielbohry.authservice.api;
  2. import com.danielbohry.authservice.api.dto.AuthenticationResponse;
  3. import com.danielbohry.authservice.api.dto.PasswordChangeRequest;
  4. import com.danielbohry.authservice.api.dto.UserResponse;
  5. import com.danielbohry.authservice.domain.ApplicationUser;
  6. import com.danielbohry.authservice.service.auth.AuthService;
  7. import lombok.AllArgsConstructor;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.http.HttpStatus;
  10. import org.springframework.http.ResponseEntity;
  11. import org.springframework.security.core.context.SecurityContext;
  12. import org.springframework.security.core.context.SecurityContextHolder;
  13. import org.springframework.web.bind.annotation.CrossOrigin;
  14. import org.springframework.web.bind.annotation.GetMapping;
  15. import org.springframework.web.bind.annotation.PostMapping;
  16. import org.springframework.web.bind.annotation.RequestBody;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RestController;
  19. @Slf4j
  20. @RestController
  21. @AllArgsConstructor
  22. @CrossOrigin
  23. @RequestMapping("api/users")
  24. public class UserController {
  25. private final AuthService authService;
  26. @GetMapping("current")
  27. public ResponseEntity<UserResponse> get() {
  28. SecurityContext context = SecurityContextHolder.getContext();
  29. Object principal = context.getAuthentication().getPrincipal();
  30. if (principal instanceof ApplicationUser user) {
  31. return ResponseEntity.ok(new UserResponse(user.getId(), user.getUsername(), user.getRoles().stream().map(Enum::toString).toList()));
  32. }
  33. return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
  34. }
  35. @PostMapping("change-password")
  36. public ResponseEntity<AuthenticationResponse> changePassword(@RequestBody PasswordChangeRequest request) {
  37. SecurityContext context = SecurityContextHolder.getContext();
  38. Object principal = context.getAuthentication().getPrincipal();
  39. if (principal instanceof ApplicationUser user) {
  40. log.info("Changing password for user [{}]", user.getUsername());
  41. var response = authService.changePassword(user.getId(), request.getCurrentPassword(), request.getNewPassword());
  42. return ResponseEntity.ok(response);
  43. }
  44. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
  45. }
  46. }