| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package com.example.projectback.controllers;
- import com.example.projectback.message.request.LoginForm;
- import com.example.projectback.message.request.SignUpForm;
- import com.example.projectback.message.response.JwtResponse;
- import com.example.projectback.message.response.ResponseMessage;
- import com.example.projectback.model.Role;
- import com.example.projectback.model.RoleName;
- import com.example.projectback.model.User;
- import com.example.projectback.repository.RoleRepository;
- import com.example.projectback.repository.UserRepository;
- import com.example.projectback.security.jwt.JwtProvider;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.security.authentication.AuthenticationManager;
- import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
- import org.springframework.security.core.Authentication;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.web.bind.annotation.*;
- import javax.validation.Valid;
- import java.util.HashSet;
- import java.util.Set;
- @RestController
- @CrossOrigin(origins = "http://localhost:4200")
- @RequestMapping("/auth")
- public class AuthController {
- AuthenticationManager authenticationManager;
- UserRepository userRepository;
- RoleRepository roleRepository;
- PasswordEncoder passwordEncoder;
- JwtProvider jwtProvider;
- public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, RoleRepository roleRepository, PasswordEncoder passwordEncoder, JwtProvider jwtProvider) {
- this.authenticationManager = authenticationManager;
- this.userRepository = userRepository;
- this.roleRepository = roleRepository;
- this.passwordEncoder = passwordEncoder;
- this.jwtProvider = jwtProvider;
- }
- @PostMapping("/login")
- public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginForm loginRequest) {
- Authentication authentication = authenticationManager.authenticate(
- new UsernamePasswordAuthenticationToken(loginRequest.getEmail(), loginRequest.getPassword()));
- SecurityContextHolder.getContext().setAuthentication(authentication);
- String jwt = jwtProvider.generateJwtToken(authentication);
- UserDetails userDetails = (UserDetails) authentication.getPrincipal();
- return ResponseEntity.ok(new JwtResponse(jwt, userDetails.getUsername(), userDetails.getAuthorities()));
- }
- @PostMapping("/signup")
- public ResponseEntity<?> registerUser(@Valid @RequestBody SignUpForm signUpRequest) {
- if (userRepository.existsByEmail(signUpRequest.getEmail())) {
- return new ResponseEntity<>(new ResponseMessage("Fail -> Email is already taken"), HttpStatus.BAD_REQUEST);
- }
- User user = new User(signUpRequest.getEmail(), passwordEncoder.encode(signUpRequest.getPassword()));
- Set<String> strRoles = signUpRequest.getRole();
- Set<Role> roles = new HashSet<>();
- strRoles.forEach(role -> {
- if ("admin".equals(role)) {
- Role adminRole = roleRepository.findByName(RoleName.ROLE_ADMIN)
- .orElseThrow(() -> new RuntimeException("Fail -> Cause: Admin Role not found."));
- roles.add(adminRole);
- }
- if ("user".equals(role)) {
- Role userRole = roleRepository.findByName(RoleName.ROLE_USER)
- .orElseThrow(() -> new RuntimeException("Fail -> Cause: User Role not found"));
- roles.add(userRole);
- }
- });
- user.setRoles(roles);
- userRepository.save(user);
- return new ResponseEntity<>(new ResponseMessage("User registered successfully"), HttpStatus.OK);
- }
- }
|