INC-1 add login function
This commit is contained in:
@@ -6,17 +6,17 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.soune.no_copy.dto.LoginRequest;
|
||||
import ru.soune.no_copy.dto.LoginResponse;
|
||||
import ru.soune.no_copy.dto.RegisterRequest;
|
||||
import ru.soune.no_copy.entity.AuthToken;
|
||||
import ru.soune.no_copy.entity.User;
|
||||
import ru.soune.no_copy.exception.NotValidationPasswordException;
|
||||
import ru.soune.no_copy.exception.UserAlreadyExistsException;
|
||||
import ru.soune.no_copy.exception.UserNotFoundException;
|
||||
import ru.soune.no_copy.repository.AuthTokenRepository;
|
||||
import ru.soune.no_copy.repository.UserRepository;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HexFormat;
|
||||
import java.util.Base64;
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -32,6 +32,8 @@ public class AuthService {
|
||||
|
||||
private final MessageSource messageSource;
|
||||
|
||||
private final SecureRandom secureRandom = new SecureRandom();
|
||||
|
||||
@Transactional
|
||||
public AuthToken register(RegisterRequest registerRequest) {
|
||||
if (userRepository.existsByEmail(registerRequest.email())) {
|
||||
@@ -49,48 +51,37 @@ public class AuthService {
|
||||
User savedUser = userRepository.save(user);
|
||||
|
||||
AuthToken authToken = new AuthToken();
|
||||
authToken.setToken(generateToken());
|
||||
authToken.setToken(generateAuthToken());
|
||||
authToken.setUser(savedUser);
|
||||
|
||||
return authTokenRepository.save(authToken);
|
||||
}
|
||||
|
||||
public LoginResponse login(LoginRequest request) {
|
||||
@Transactional
|
||||
public AuthToken login(LoginRequest request) {
|
||||
Optional<User> userOpt = userRepository.findByEmail(request.getEmail());
|
||||
|
||||
if (userOpt.isEmpty()) {
|
||||
//ADD EXCEPTION
|
||||
throw new UserNotFoundException("User with email " + request.getEmail() + " not found");
|
||||
}
|
||||
|
||||
User user = userOpt.get();
|
||||
|
||||
if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
|
||||
//ADD EXCEPTION
|
||||
throw new NotValidationPasswordException("Invalid password");
|
||||
}
|
||||
|
||||
String token = generateToken();
|
||||
LocalDateTime expiresAt = LocalDateTime.now().plusDays(30);
|
||||
|
||||
AuthToken authToken = new AuthToken();
|
||||
authToken.setToken(generateToken());
|
||||
authToken.setToken(generateAuthToken());
|
||||
authToken.setUser(user);
|
||||
|
||||
authTokenRepository.save(authToken);
|
||||
|
||||
userRepository.save(user);
|
||||
|
||||
LoginResponse response = new LoginResponse();
|
||||
response.setSuccess(true);
|
||||
// response.setMessage(""); add message
|
||||
response.setUser(user);
|
||||
response.setToken(token);
|
||||
response.setExpiresAt(expiresAt.toString());
|
||||
|
||||
return response;
|
||||
return authTokenRepository.save(authToken);
|
||||
}
|
||||
//TODO change logic generate token
|
||||
private String generateToken() {
|
||||
|
||||
|
||||
private String generateAuthToken() {
|
||||
byte[] bytes = new byte[32];
|
||||
new SecureRandom().nextBytes(bytes);
|
||||
return HexFormat.of().formatHex(bytes);
|
||||
secureRandom.nextBytes(bytes);
|
||||
return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user