ddangelorb
3 years ago
2 changed files with 173 additions and 0 deletions
-
99src/main/java/org/waterproofingdata/wpdauth/controller/UsersController.java
-
74src/main/java/org/waterproofingdata/wpdauth/service/UsersService.java
@ -0,0 +1,99 @@ |
|||||
|
package org.waterproofingdata.wpdauth.controller; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
import org.waterproofingdata.wpdauth.dto.UsersRequestDTO; |
||||
|
import org.waterproofingdata.wpdauth.dto.UsersResponseDTO; |
||||
|
import org.waterproofingdata.wpdauth.model.Users; |
||||
|
import org.waterproofingdata.wpdauth.service.UsersService; |
||||
|
import org.modelmapper.ModelMapper; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
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.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import io.swagger.annotations.ApiParam; |
||||
|
import io.swagger.annotations.ApiResponse; |
||||
|
import io.swagger.annotations.ApiResponses; |
||||
|
import io.swagger.annotations.Authorization; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/users") |
||||
|
@Api(tags = "users") |
||||
|
public class UsersController { |
||||
|
@Autowired |
||||
|
private UsersService userService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ModelMapper modelMapper; |
||||
|
|
||||
|
@PostMapping("/signin") |
||||
|
@ApiOperation(value = "${UserController.signin}") |
||||
|
@ApiResponses(value = {// |
||||
|
@ApiResponse(code = 400, message = "Something went wrong"), // |
||||
|
@ApiResponse(code = 422, message = "Invalid username/password supplied")}) |
||||
|
public String login(// |
||||
|
@ApiParam("Username") @RequestParam String username, // |
||||
|
@ApiParam("Password") @RequestParam String password) { |
||||
|
return userService.signin(username, password); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/signup") |
||||
|
@ApiOperation(value = "${UserController.signup}") |
||||
|
@ApiResponses(value = {// |
||||
|
@ApiResponse(code = 400, message = "Something went wrong"), // |
||||
|
@ApiResponse(code = 403, message = "Access denied"), // |
||||
|
@ApiResponse(code = 422, message = "Username is already in use")}) |
||||
|
public String signup(@ApiParam("Signup User") @RequestBody UsersRequestDTO user) { |
||||
|
return userService.signup(modelMapper.map(user, Users.class)); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/activate") |
||||
|
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_CLIENT')") |
||||
|
@ApiOperation(value = "${UserController.activate}", authorizations = { @Authorization(value="apiKey") }) |
||||
|
@ApiResponses(value = {// |
||||
|
@ApiResponse(code = 400, message = "Something went wrong"), // |
||||
|
@ApiResponse(code = 403, message = "Access denied"), // |
||||
|
@ApiResponse(code = 404, message = "The user doesn't exist"), // |
||||
|
@ApiResponse(code = 500, message = "Expired or invalid JWT token")}) |
||||
|
public String activate(@ApiParam("Username") @PathVariable String username) { |
||||
|
userService.activate(username); |
||||
|
return username; |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value = "/{username}") |
||||
|
@PreAuthorize("hasRole('ROLE_ADMIN')") |
||||
|
@ApiOperation(value = "${UserController.search}", response = UsersResponseDTO.class, authorizations = { @Authorization(value="apiKey") }) |
||||
|
@ApiResponses(value = {// |
||||
|
@ApiResponse(code = 400, message = "Something went wrong"), // |
||||
|
@ApiResponse(code = 403, message = "Access denied"), // |
||||
|
@ApiResponse(code = 404, message = "The user doesn't exist"), // |
||||
|
@ApiResponse(code = 500, message = "Expired or invalid JWT token")}) |
||||
|
public UsersResponseDTO search(@ApiParam("Username") @PathVariable String username) { |
||||
|
return modelMapper.map(userService.search(username), UsersResponseDTO.class); |
||||
|
} |
||||
|
|
||||
|
@GetMapping(value = "/me") |
||||
|
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_CLIENT')") |
||||
|
@ApiOperation(value = "${UserController.me}", response = UsersResponseDTO.class, authorizations = { @Authorization(value="apiKey") }) |
||||
|
@ApiResponses(value = {// |
||||
|
@ApiResponse(code = 400, message = "Something went wrong"), // |
||||
|
@ApiResponse(code = 403, message = "Access denied"), // |
||||
|
@ApiResponse(code = 500, message = "Expired or invalid JWT token")}) |
||||
|
public UsersResponseDTO whoami(HttpServletRequest req) { |
||||
|
return modelMapper.map(userService.whoami(req), UsersResponseDTO.class); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/refresh") |
||||
|
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_CLIENT')") |
||||
|
public String refresh(HttpServletRequest req) { |
||||
|
return userService.refresh(req.getRemoteUser()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,74 @@ |
|||||
|
package org.waterproofingdata.wpdauth.service; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.security.authentication.AuthenticationManager; |
||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
||||
|
import org.springframework.security.core.AuthenticationException; |
||||
|
import org.springframework.security.crypto.password.PasswordEncoder; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import org.waterproofingdata.wpdauth.exception.CustomException; |
||||
|
import org.waterproofingdata.wpdauth.model.Users; |
||||
|
import org.waterproofingdata.wpdauth.repository.UsersRepository; |
||||
|
import org.waterproofingdata.wpdauth.security.JwtTokenProvider; |
||||
|
|
||||
|
@Service |
||||
|
public class UsersService { |
||||
|
@Autowired |
||||
|
private UsersRepository userRepository; |
||||
|
|
||||
|
@Autowired |
||||
|
private PasswordEncoder passwordEncoder; |
||||
|
|
||||
|
@Autowired |
||||
|
private JwtTokenProvider jwtTokenProvider; |
||||
|
|
||||
|
@Autowired |
||||
|
private AuthenticationManager authenticationManager; |
||||
|
|
||||
|
public boolean existsByUsername(String username) { |
||||
|
return userRepository.existsByUsername(username); |
||||
|
} |
||||
|
|
||||
|
public String signin(String username, String password) { |
||||
|
try { |
||||
|
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); |
||||
|
return jwtTokenProvider.createToken(username, userRepository.findByUsername(username).getRoles()); |
||||
|
} catch (AuthenticationException e) { |
||||
|
throw new CustomException("Invalid username/password supplied", HttpStatus.UNPROCESSABLE_ENTITY); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public String signup(Users user) { |
||||
|
if (!existsByUsername(user.getUsername())) { |
||||
|
user.setPassword(passwordEncoder.encode(user.getPassword())); |
||||
|
userRepository.save(user); |
||||
|
return jwtTokenProvider.createToken(user.getUsername(), user.getRoles()); |
||||
|
} else { |
||||
|
throw new CustomException("Username is already in use", HttpStatus.UNPROCESSABLE_ENTITY); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void activate(String username) { |
||||
|
//userRepository.activateByUsername(username); |
||||
|
} |
||||
|
|
||||
|
public Users search(String username) { |
||||
|
Users user = userRepository.findByUsername(username); |
||||
|
if (user == null) { |
||||
|
throw new CustomException("The user doesn't exist", HttpStatus.NOT_FOUND); |
||||
|
} |
||||
|
return user; |
||||
|
} |
||||
|
|
||||
|
public Users whoami(HttpServletRequest req) { |
||||
|
return userRepository.findByUsername(jwtTokenProvider.getUsername(jwtTokenProvider.resolveToken(req))); |
||||
|
} |
||||
|
|
||||
|
public String refresh(String username) { |
||||
|
return jwtTokenProvider.createToken(username, userRepository.findByUsername(username).getRoles()); |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue