AuthRESTController.java 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package pl.dmcs.springbootjsp_iwa.controllers;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.http.HttpStatus;
  4. import org.springframework.http.ResponseEntity;
  5. import org.springframework.security.authentication.AuthenticationManager;
  6. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  7. import org.springframework.security.core.Authentication;
  8. import org.springframework.security.core.context.SecurityContextHolder;
  9. import org.springframework.security.core.userdetails.UserDetails;
  10. import org.springframework.security.crypto.password.PasswordEncoder;
  11. import org.springframework.web.bind.annotation.*;
  12. import pl.dmcs.springbootjsp_iwa.message.request.LoginForm;
  13. import pl.dmcs.springbootjsp_iwa.message.request.SignUpForm;
  14. import pl.dmcs.springbootjsp_iwa.message.response.JwtResponse;
  15. import pl.dmcs.springbootjsp_iwa.message.response.ResponseMessage;
  16. import pl.dmcs.springbootjsp_iwa.model.Role;
  17. import pl.dmcs.springbootjsp_iwa.model.RoleName;
  18. import pl.dmcs.springbootjsp_iwa.model.User;
  19. import pl.dmcs.springbootjsp_iwa.repository.RoleRepository;
  20. import pl.dmcs.springbootjsp_iwa.repository.UserRepository;
  21. import pl.dmcs.springbootjsp_iwa.security.jwt.JwtProvider;
  22. import javax.validation.Valid;
  23. import java.util.HashSet;
  24. import java.util.Set;
  25. @RestController
  26. @CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
  27. @RequestMapping("/auth")
  28. public class AuthRESTController {
  29. @Autowired
  30. AuthenticationManager authenticationManager;
  31. @Autowired
  32. UserRepository userRepository;
  33. @Autowired
  34. RoleRepository roleRepository;
  35. @Autowired
  36. PasswordEncoder passwordEncoder;
  37. @Autowired
  38. JwtProvider jwtProvider;
  39. @PostMapping("/signin")
  40. public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginForm loginRequest) {
  41. Authentication authentication = authenticationManager.authenticate(
  42. new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));
  43. SecurityContextHolder.getContext().setAuthentication(authentication);
  44. String jwt = jwtProvider.generateJwtToken(authentication);
  45. UserDetails userDetails = (UserDetails) authentication.getPrincipal();
  46. return ResponseEntity.ok(new JwtResponse(jwt,userDetails.getUsername(), userDetails.getAuthorities()));
  47. }
  48. @PostMapping("/signup")
  49. public ResponseEntity<?> registerUser(@Valid @RequestBody SignUpForm signUpRequest) {
  50. if (userRepository.existsByUsername(signUpRequest.getUsername())) {
  51. return new ResponseEntity<>(new ResponseMessage("Fail -> Username is already taken."), HttpStatus.BAD_REQUEST);
  52. }
  53. // Create user account
  54. User user = new User(signUpRequest.getUsername(), passwordEncoder.encode(signUpRequest.getPassword()));
  55. Set<String> strRoles = signUpRequest.getRole();
  56. Set<Role> roles = new HashSet<>();
  57. strRoles.forEach(role -> {
  58. switch (role) {
  59. case "admin":
  60. Role adminRole = roleRepository.findByName(RoleName.ROLE_ADMIN)
  61. .orElseThrow(() -> new RuntimeException("Fail -> Cause: Admin Role not found."));
  62. roles.add(adminRole);
  63. break;
  64. default:
  65. Role userRole = roleRepository.findByName(RoleName.ROLE_USER)
  66. .orElseThrow(() -> new RuntimeException("Fail -> Cause: User Role not found."));
  67. roles.add(userRole);
  68. }
  69. });
  70. user.setRoles(roles);
  71. userRepository.save(user);
  72. return new ResponseEntity<>(new ResponseMessage("User registered successfully."), HttpStatus.OK);
  73. }
  74. }