AuthController.java 3.9 KB

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