From 470484064a7a5290599eabafc21d40e399d12550 Mon Sep 17 00:00:00 2001 From: iRedTea Date: Tue, 27 Jun 2023 14:06:36 +0300 Subject: [PATCH] 0.0.10 --- build.gradle | 2 +- .../web/auth/controller/AuthController.java | 8 +++--- .../web/controller/UserController.java | 27 ++++++++++++++++--- .../validation/ResponseErrorValidation.java | 2 +- .../web/forum/controller/ForumController.java | 1 + .../easystartup/web/security/JWTUtil.java | 2 ++ .../easystartup/web/service/UserService.java | 12 +++++++++ .../easystartup/web/util/FastChecksUtil.java | 21 +++++++++++++++ 8 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 src/main/java/site/easystartup/web/util/FastChecksUtil.java diff --git a/build.gradle b/build.gradle index c51b1e8..2dbc51d 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group = 'site.easy-startup' -version = '0.0.9' +version = '0.0.10' sourceCompatibility = "17" configurations { diff --git a/src/main/java/site/easystartup/web/auth/controller/AuthController.java b/src/main/java/site/easystartup/web/auth/controller/AuthController.java index 41957d9..d3f9d5c 100644 --- a/src/main/java/site/easystartup/web/auth/controller/AuthController.java +++ b/src/main/java/site/easystartup/web/auth/controller/AuthController.java @@ -9,10 +9,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.ObjectUtils; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import site.easystartup.web.domain.model.User; import site.easystartup.web.domain.request.LoginRequest; import site.easystartup.web.domain.request.SignupRequest; @@ -26,6 +23,7 @@ import site.easystartup.web.service.AuthService; import site.easystartup.web.service.UserService; import javax.validation.Valid; +import java.security.Principal; @RestController @RequestMapping("/auth") @@ -38,6 +36,8 @@ public class AuthController { private final ResponseErrorValidation responseErrorValidation; private final ModelMapper modelMapper; + + @PostMapping("/signup") public ResponseEntity registration(@Valid @RequestBody SignupRequest signupRequest, BindingResult bindingResult) { diff --git a/src/main/java/site/easystartup/web/controller/UserController.java b/src/main/java/site/easystartup/web/controller/UserController.java index dfa7c9f..a01218d 100644 --- a/src/main/java/site/easystartup/web/controller/UserController.java +++ b/src/main/java/site/easystartup/web/controller/UserController.java @@ -4,10 +4,12 @@ import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.util.ObjectUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import site.easystartup.web.domain.model.User; +import site.easystartup.web.domain.response.MessageResponse; import site.easystartup.web.domain.validation.ResponseErrorValidation; import site.easystartup.web.dto.UserDto; import site.easystartup.web.exception.NoPermissionException; @@ -17,6 +19,7 @@ import site.easystartup.web.project.dto.ProjectDto; import site.easystartup.web.project.service.ProjectService; import site.easystartup.web.request.UserRequest; import site.easystartup.web.service.UserService; +import site.easystartup.web.util.FastChecksUtil; import javax.validation.Valid; import java.security.Principal; @@ -24,15 +27,31 @@ import java.security.Principal; @RestController @RequiredArgsConstructor(onConstructor_ = @Autowired) public class UserController { - private final UserService userService; + private final site.easystartup.web.service.UserService userService; private final ModelMapper modelMapper; private final ResponseErrorValidation responseErrorValidation; + private final FastChecksUtil checksUtil; + + @GetMapping("/user/current") + public ResponseEntity getCurrentUser(Principal principal) { + //if(principal == null) + try { + return ResponseEntity.ok().body(modelMapper.map(userService.getUserByPrincipal(principal), UserDto.class)); + } catch(Throwable e) { + return ResponseEntity.badRequest().body(new MessageResponse("User not found")); + } + + } @GetMapping("/user/{username}") - public ResponseEntity user(@PathVariable String username) { - return ResponseEntity.ok().body(modelMapper.map(userService.getUserByUsername(username), UserDto.class)); + public ResponseEntity getUser(@PathVariable String username) { + Long id = Long.parseLong(username); + ResponseEntity result = checksUtil.nullIfValid(id); + return result == null ? ResponseEntity.ok().body(modelMapper.map(userService.getUserByUsername(username), UserDto.class)) : result; } + + @PutMapping("/user/edit/{username}") public ResponseEntity userEdit(@PathVariable String username,@Valid @RequestBody UserRequest userRequest, BindingResult bindingResult, Principal principal) { @@ -40,7 +59,7 @@ public class UserController { throw new NoPermissionException(String.format("User %s can not edit profile of user %s", principal.getName(), username)); - var errors = responseErrorValidation.mapValidationService(bindingResult); + ResponseEntity errors = responseErrorValidation.mapValidationService(bindingResult); if (!ObjectUtils.isEmpty(errors)) return errors; User editedUser = userService.editUser(username, userRequest); diff --git a/src/main/java/site/easystartup/web/domain/validation/ResponseErrorValidation.java b/src/main/java/site/easystartup/web/domain/validation/ResponseErrorValidation.java index 7d52187..eb66c2e 100644 --- a/src/main/java/site/easystartup/web/domain/validation/ResponseErrorValidation.java +++ b/src/main/java/site/easystartup/web/domain/validation/ResponseErrorValidation.java @@ -14,7 +14,7 @@ import java.util.Map; @Service public class ResponseErrorValidation { - public ResponseEntity mapValidationService(BindingResult result) { + public ResponseEntity mapValidationService(BindingResult result) { if (result.hasErrors()) { Map errorMap = new HashMap<>(); diff --git a/src/main/java/site/easystartup/web/forum/controller/ForumController.java b/src/main/java/site/easystartup/web/forum/controller/ForumController.java index 7e289cd..2a26d27 100644 --- a/src/main/java/site/easystartup/web/forum/controller/ForumController.java +++ b/src/main/java/site/easystartup/web/forum/controller/ForumController.java @@ -51,6 +51,7 @@ public class ForumController { public ResponseEntity> my(Principal principal) { var discussions = forumService.getDiscussionsByAuthor(principal) .stream().map(discussion -> modelMapper.map(discussion, DiscussionDto.class)).toList(); + System.out.println(principal.getName()); return ResponseEntity.ok().body(discussions); } diff --git a/src/main/java/site/easystartup/web/security/JWTUtil.java b/src/main/java/site/easystartup/web/security/JWTUtil.java index 9b9d192..6cb1cdb 100644 --- a/src/main/java/site/easystartup/web/security/JWTUtil.java +++ b/src/main/java/site/easystartup/web/security/JWTUtil.java @@ -34,4 +34,6 @@ public class JWTUtil { return decodedJWT.getClaim("username").asString(); } + + } diff --git a/src/main/java/site/easystartup/web/service/UserService.java b/src/main/java/site/easystartup/web/service/UserService.java index 37183ff..eba8354 100644 --- a/src/main/java/site/easystartup/web/service/UserService.java +++ b/src/main/java/site/easystartup/web/service/UserService.java @@ -22,6 +22,7 @@ public class UserService { private final StorageService storageService; public User getUserByPrincipal(Principal principal) { + if(principal == null) return getCurrent(); return userRepo.findByUsername(principal.getName()); } @@ -29,6 +30,11 @@ public class UserService { return userRepo.findById(userId).orElseThrow(() -> new UsernameNotFoundException("User not found")); } + public boolean userExists(Long userId) { + return userRepo.existsById(userId); + } + + public User getUserByUsername(String username) { return userRepo.findUserByUsername(username).orElseThrow(() -> new UsernameNotFoundException("User not found")); } @@ -49,4 +55,10 @@ public class UserService { user.setRequests(userRequest.getRequests() == null ? user.getRequests() : userRequest.getRequests()); return userRepo.save(user); } + + public User getCurrent() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String login = authentication.getName(); + return getUserByUsername(login); + } } diff --git a/src/main/java/site/easystartup/web/util/FastChecksUtil.java b/src/main/java/site/easystartup/web/util/FastChecksUtil.java new file mode 100644 index 0000000..f195115 --- /dev/null +++ b/src/main/java/site/easystartup/web/util/FastChecksUtil.java @@ -0,0 +1,21 @@ +package site.easystartup.web.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.ResponseEntity; +import site.easystartup.web.service.UserService; + +@Configuration +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class FastChecksUtil { + private final UserService userService; + + public ResponseEntity nullIfValid(Long user) { + if(!userService.userExists(user)) { + return ResponseEntity.notFound().build(); + } + return null; + } + +}