Skip to content

Commit

Permalink
Merge branch 'vlad-dieaconu-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
DrBaxR committed Mar 30, 2021
2 parents 1a2e3bc + eb63b5e commit 9fe97c8
Showing 1 changed file with 127 additions and 0 deletions.
127 changes: 127 additions & 0 deletions src/main/java/payroll/controllers/AuthRestAPIs.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package payroll.controllers;

import org.springframework.beans.factory.annotation.Autowired;
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.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.CrossOrigin;
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 payroll.controllers.forms.JwtResponse;
import payroll.controllers.forms.LoginForm;
import payroll.controllers.forms.SignUpForm;
import payroll.entities.Role;
import payroll.entities.RoleName;
import payroll.entities.User;
import payroll.repositories.RoleRepository;
import payroll.repositories.UserRepository;
import payroll.security.jwt.JwtUtils;
import payroll.security.services.UserDetailsImpl;

import javax.validation.Valid;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

//pull req
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/auth")
public class AuthRestAPIs {

@Autowired
AuthenticationManager authenticationManager;

@Autowired
UserRepository userRepository;

@Autowired
RoleRepository roleRepository;

@Autowired
PasswordEncoder encoder;

@Autowired
JwtUtils jwtProvider;

@PostMapping("/signin")
public ResponseEntity authenticateUser(@Valid @RequestBody LoginForm loginRequest) {

System.out.println(loginRequest.getEmail());
System.out.println(loginRequest.getPassword());

Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getEmail(), loginRequest.getPassword()));

SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtProvider.generateJwtToken(authentication);

UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
List<String> roles = userDetails.getAuthorities().stream()
.map(item -> item.getAuthority())
.collect(Collectors.toList());

return ResponseEntity.ok(new JwtResponse(
jwt,
userDetails.getEmail(),
userDetails.getId(),
roles));
}




@PostMapping("/signup")
public ResponseEntity registerUser(@Valid @RequestBody SignUpForm signUpRequest) {
if(userRepository.existsByEmail(signUpRequest.getEmail())) {
return new ResponseEntity("Fail -> Email is already taken!",
HttpStatus.BAD_REQUEST);
}
Set<String> strRoles = signUpRequest.getRoles();
Set<Role> roles = new HashSet<>();

if (strRoles == null) {
Role userRole = roleRepository.findByName(RoleName.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(userRole);
} else {
strRoles.forEach(role -> {
switch (role) {
case "admin":
Role adminRole = roleRepository.findByName(RoleName.ROLE_ADMIN)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(adminRole);

break;

default:
Role userRole = roleRepository.findByName(RoleName.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(userRole);
}
});
}

//String username, String email, String password, List<String> groups
User user = new User(signUpRequest.getUsername(),
signUpRequest.getEmail(),
encoder.encode(signUpRequest.getPassword()),
signUpRequest.getGroups()
);


user.setRoles(roles);

userRepository.save(user);

return ResponseEntity.ok().body("User registered successfully!");
}
}

0 comments on commit 9fe97c8

Please sign in to comment.