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.util.HashMap;
|
---|
21 |
|
---|
22 | @Service
|
---|
23 | @RequiredArgsConstructor
|
---|
24 | public class AuthServiceImpl implements AuthService {
|
---|
25 |
|
---|
26 | private final RecruiterRepository recruiterRepository;
|
---|
27 | private final JobSeekerRepository jobSeekerRepository;
|
---|
28 | private final PasswordEncoder passwordEncoder;
|
---|
29 | private final AuthenticationManager authenticationManager;
|
---|
30 | private final UserRepository userRepository;
|
---|
31 | private final JwtService jwtService;
|
---|
32 |
|
---|
33 |
|
---|
34 | @Override
|
---|
35 | public User signUpJobSeeker(JobSeeker jobSeeker) {
|
---|
36 | jobSeeker.setPassword(passwordEncoder.encode(jobSeeker.getPassword()));
|
---|
37 | return jobSeekerRepository.save(jobSeeker);
|
---|
38 | }
|
---|
39 |
|
---|
40 | public User signUpRecruiter(Recruiter recruiter) {
|
---|
41 | recruiter.setPassword(passwordEncoder.encode(recruiter.getPassword()));
|
---|
42 | return recruiterRepository.save(recruiter);
|
---|
43 | }
|
---|
44 |
|
---|
45 | public JwtAuthResponse signIn(SignInDTO signInDTO) {
|
---|
46 | authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(signInDTO.getEmail(), signInDTO.getPassword()));
|
---|
47 |
|
---|
48 | User user = userRepository.findByEmail(signInDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("Email or password is incorrect"));
|
---|
49 | String jwt = jwtService.generateToken(user);
|
---|
50 | String refreshJwt = jwtService.generateRefreshToken(new HashMap<>(), user);
|
---|
51 |
|
---|
52 | return new JwtAuthResponse(user.getEmail(), user.getName(), user.getRole().name(), jwt, refreshJwt);
|
---|
53 | }
|
---|
54 |
|
---|
55 | public JwtAuthResponse refreshToken(RefreshTokenRequest refreshTokenRequest) {
|
---|
56 | String userEmail = jwtService.extractUsername(refreshTokenRequest.getToken());
|
---|
57 | User user = userRepository.findByEmail(userEmail).orElseThrow();
|
---|
58 | if(jwtService.isTokenValid(refreshTokenRequest.getToken(), user)) {
|
---|
59 | String jwt = jwtService.generateToken(user);
|
---|
60 |
|
---|
61 | return new JwtAuthResponse(user.getEmail(), user.getName(), user.getRole().name(), jwt, refreshTokenRequest.getToken());
|
---|
62 | }
|
---|
63 | return null;
|
---|
64 | }
|
---|
65 | }
|
---|