1 | package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
|
---|
2 |
|
---|
3 | import lombok.RequiredArgsConstructor;
|
---|
4 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.SignInDTO;
|
---|
5 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.JwtAuthResponse;
|
---|
6 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RefreshTokenRequest;
|
---|
7 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.JobSeeker;
|
---|
8 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
|
---|
9 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
|
---|
10 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.JobSeekerRepository;
|
---|
11 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
|
---|
12 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.UserRepository;
|
---|
13 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.AuthService;
|
---|
14 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
|
---|
15 | import org.springframework.security.authentication.AuthenticationManager;
|
---|
16 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
---|
17 | import org.springframework.security.crypto.password.PasswordEncoder;
|
---|
18 | import org.springframework.stereotype.Service;
|
---|
19 |
|
---|
20 | import java.time.LocalDateTime;
|
---|
21 | import java.util.HashMap;
|
---|
22 |
|
---|
23 | @Service
|
---|
24 | @RequiredArgsConstructor
|
---|
25 | public class AuthServiceImpl implements AuthService {
|
---|
26 |
|
---|
27 | private final RecruiterRepository recruiterRepository;
|
---|
28 | private final JobSeekerRepository jobSeekerRepository;
|
---|
29 | private final PasswordEncoder passwordEncoder;
|
---|
30 | private final AuthenticationManager authenticationManager;
|
---|
31 | private final UserRepository userRepository;
|
---|
32 | private final JwtService jwtService;
|
---|
33 |
|
---|
34 | @Override
|
---|
35 | public User signUpJobSeeker(JobSeeker jobSeeker) {
|
---|
36 | jobSeeker.setPassword(passwordEncoder.encode(jobSeeker.getPassword()));
|
---|
37 | jobSeeker.setHasAccess(true);
|
---|
38 | jobSeeker.setRegisteredOn(LocalDateTime.now());
|
---|
39 | return jobSeekerRepository.save(jobSeeker);
|
---|
40 | }
|
---|
41 |
|
---|
42 | public User signUpRecruiter(Recruiter recruiter) {
|
---|
43 | recruiter.setPassword(passwordEncoder.encode(recruiter.getPassword()));
|
---|
44 | recruiter.setHasAccess(false);
|
---|
45 | recruiter.setRegisteredOn(LocalDateTime.now());
|
---|
46 | return recruiterRepository.save(recruiter);
|
---|
47 | }
|
---|
48 |
|
---|
49 | public JwtAuthResponse signIn(SignInDTO signInDTO) {
|
---|
50 | authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(signInDTO.getEmail(), signInDTO.getPassword()));
|
---|
51 |
|
---|
52 | User user = userRepository.findByEmail(signInDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("Email or password is incorrect"));
|
---|
53 | String jwt = jwtService.generateToken(user);
|
---|
54 | String refreshJwt = jwtService.generateRefreshToken(new HashMap<>(), user);
|
---|
55 |
|
---|
56 | return new JwtAuthResponse(user.getId(), user.getEmail(), user.getName(), user.getRole().name(), user.isHasAccess(), jwt, refreshJwt);
|
---|
57 | }
|
---|
58 |
|
---|
59 | public JwtAuthResponse refreshToken(RefreshTokenRequest refreshTokenRequest) {
|
---|
60 | String userEmail = jwtService.extractUsername(refreshTokenRequest.getToken());
|
---|
61 | User user = userRepository.findByEmail(userEmail).orElseThrow();
|
---|
62 | if(jwtService.isTokenValid(refreshTokenRequest.getToken(), user)) {
|
---|
63 | String jwt = jwtService.generateToken(user);
|
---|
64 |
|
---|
65 | return new JwtAuthResponse(user.getId(), user.getEmail(), user.getName(), user.getRole().name(), user.isHasAccess(), jwt, refreshTokenRequest.getToken());
|
---|
66 | }
|
---|
67 | return null;
|
---|
68 | }
|
---|
69 | }
|
---|