|
|
@@ -2,15 +2,12 @@ package com.danielbohry.authservice.api;
|
|
|
|
|
|
import com.danielbohry.authservice.api.dto.*;
|
|
|
import com.danielbohry.authservice.domain.ApplicationUser;
|
|
|
-import com.danielbohry.authservice.domain.Role;
|
|
|
import com.danielbohry.authservice.service.auth.AuthService;
|
|
|
import com.danielbohry.authservice.service.user.UserService;
|
|
|
-import com.mongodb.internal.bulk.UpdateRequest;
|
|
|
+import com.danielbohry.authservice.util.SecurityUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
-import org.springframework.security.core.context.SecurityContext;
|
|
|
-import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.util.List;
|
|
|
@@ -32,69 +29,62 @@ public class UserController {
|
|
|
|
|
|
@GetMapping
|
|
|
public ResponseEntity<List<UserResponse>> getAll() {
|
|
|
- SecurityContext context = SecurityContextHolder.getContext();
|
|
|
- Object principal = context.getAuthentication().getPrincipal();
|
|
|
- if (principal instanceof ApplicationUser user && user.getRoles().contains(ADMIN)) {
|
|
|
+ try {
|
|
|
+ SecurityUtils.getCurrentAdminUser();
|
|
|
return ResponseEntity.ok(userService.findAll().stream()
|
|
|
.map(UserResponse::from)
|
|
|
.toList());
|
|
|
+ } catch (SecurityException e) {
|
|
|
+ return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
-
|
|
|
- return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
|
|
|
@PutMapping("{userId}")
|
|
|
public ResponseEntity<UserResponse> update(@PathVariable String userId, @RequestBody UserUpdateRequest request) {
|
|
|
- SecurityContext context = SecurityContextHolder.getContext();
|
|
|
- Object principal = context.getAuthentication().getPrincipal();
|
|
|
- if (principal instanceof ApplicationUser user && user.getRoles().contains(ADMIN)) {
|
|
|
+ try {
|
|
|
+ ApplicationUser user = SecurityUtils.getCurrentAdminUser();
|
|
|
user.setActive(request.isActive());
|
|
|
user.setRoles(request.roles());
|
|
|
user.setEmail(request.email());
|
|
|
user.setUpdatedAt(now());
|
|
|
return ResponseEntity.ok(UserResponse.from(userService.update(userId, user)));
|
|
|
+ } catch (SecurityException e) {
|
|
|
+ return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
-
|
|
|
- return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
|
|
|
@GetMapping("current")
|
|
|
public ResponseEntity<UserResponse> get() {
|
|
|
- SecurityContext context = SecurityContextHolder.getContext();
|
|
|
- Object principal = context.getAuthentication().getPrincipal();
|
|
|
- if (principal instanceof ApplicationUser user) {
|
|
|
+ try {
|
|
|
+ ApplicationUser user = SecurityUtils.getCurrentUser();
|
|
|
return ResponseEntity.ok(UserResponse.from(user));
|
|
|
+ } catch (SecurityException e) {
|
|
|
+ return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
-
|
|
|
- return ResponseEntity.status(FORBIDDEN).build();
|
|
|
}
|
|
|
|
|
|
@PostMapping("reset-password")
|
|
|
public ResponseEntity<AuthenticationResponse> resetPassword(@RequestBody PasswordResetRequest request) {
|
|
|
- SecurityContext context = SecurityContextHolder.getContext();
|
|
|
- Object principal = context.getAuthentication().getPrincipal();
|
|
|
-
|
|
|
- if (principal instanceof ApplicationUser user) {
|
|
|
+ try {
|
|
|
+ ApplicationUser user = SecurityUtils.getCurrentUser();
|
|
|
log.info("Resetting password for user [{}]", user.getUsername());
|
|
|
var response = authService.resetPassword(user.getId(), request.getNewPassword());
|
|
|
return ResponseEntity.ok(response);
|
|
|
+ } catch (SecurityException e) {
|
|
|
+ return ResponseEntity.status(UNAUTHORIZED).build();
|
|
|
}
|
|
|
-
|
|
|
- return ResponseEntity.status(UNAUTHORIZED).build();
|
|
|
}
|
|
|
|
|
|
@PostMapping("update-profile")
|
|
|
public ResponseEntity<AuthenticationResponse> updateProfile(@RequestBody ProfileUpdateRequest request) {
|
|
|
- SecurityContext context = SecurityContextHolder.getContext();
|
|
|
- Object principal = context.getAuthentication().getPrincipal();
|
|
|
-
|
|
|
- if (principal instanceof ApplicationUser user) {
|
|
|
+ try {
|
|
|
+ ApplicationUser user = SecurityUtils.getCurrentUser();
|
|
|
log.info("Updating profile for user [{}]", user.getUsername());
|
|
|
var response = authService.updateProfile(user.getId(), request.getCurrentPassword(), request.getNewPassword(), request.getEmail());
|
|
|
return ResponseEntity.ok(response);
|
|
|
+ } catch (SecurityException e) {
|
|
|
+ return ResponseEntity.status(UNAUTHORIZED).build();
|
|
|
}
|
|
|
-
|
|
|
- return ResponseEntity.status(UNAUTHORIZED).build();
|
|
|
}
|
|
|
|
|
|
}
|