INC-1 add start logic for login
This commit is contained in:
@@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import ru.soune.no_copy.dto.AuthResponse;
|
import ru.soune.no_copy.dto.AuthResponse;
|
||||||
|
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.dto.RegisterRequest;
|
||||||
import ru.soune.no_copy.entity.AuthToken;
|
import ru.soune.no_copy.entity.AuthToken;
|
||||||
import ru.soune.no_copy.service.AuthService;
|
import ru.soune.no_copy.service.AuthService;
|
||||||
@@ -26,4 +28,14 @@ public class AuthController {
|
|||||||
return ResponseEntity.ok(new AuthResponse(true, "success.user.register", authToken.getToken(),
|
return ResponseEntity.ok(new AuthResponse(true, "success.user.register", authToken.getToken(),
|
||||||
authToken.getExpiresAt()));
|
authToken.getExpiresAt()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/login")
|
||||||
|
public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest request) {
|
||||||
|
//TODO add try-catch and response code
|
||||||
|
// try {
|
||||||
|
return ResponseEntity.ok(authService.login(request));
|
||||||
|
// } catch (RuntimeException e) {
|
||||||
|
// return ResponseEntity.badRequest();
|
||||||
|
// }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package ru.soune.no_copy.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class LoginRequest {
|
||||||
|
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
private String password;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package ru.soune.no_copy.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import ru.soune.no_copy.entity.User;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class LoginResponse {
|
||||||
|
private boolean success;
|
||||||
|
private String message;
|
||||||
|
private User user;
|
||||||
|
private String token;
|
||||||
|
private String expiresAt;
|
||||||
|
}
|
||||||
@@ -5,6 +5,8 @@ import org.springframework.context.MessageSource;
|
|||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
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.dto.RegisterRequest;
|
||||||
import ru.soune.no_copy.entity.AuthToken;
|
import ru.soune.no_copy.entity.AuthToken;
|
||||||
import ru.soune.no_copy.entity.User;
|
import ru.soune.no_copy.entity.User;
|
||||||
@@ -13,8 +15,10 @@ import ru.soune.no_copy.repository.AuthTokenRepository;
|
|||||||
import ru.soune.no_copy.repository.UserRepository;
|
import ru.soune.no_copy.repository.UserRepository;
|
||||||
|
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.HexFormat;
|
import java.util.HexFormat;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -51,6 +55,39 @@ public class AuthService {
|
|||||||
return authTokenRepository.save(authToken);
|
return authTokenRepository.save(authToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LoginResponse login(LoginRequest request) {
|
||||||
|
Optional<User> userOpt = userRepository.findByEmail(request.getEmail());
|
||||||
|
if (userOpt.isEmpty()) {
|
||||||
|
//ADD EXCEPTION
|
||||||
|
}
|
||||||
|
|
||||||
|
User user = userOpt.get();
|
||||||
|
|
||||||
|
if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
|
||||||
|
//ADD EXCEPTION
|
||||||
|
}
|
||||||
|
|
||||||
|
String token = generateToken();
|
||||||
|
LocalDateTime expiresAt = LocalDateTime.now().plusDays(30);
|
||||||
|
|
||||||
|
AuthToken authToken = new AuthToken();
|
||||||
|
authToken.setToken(generateToken());
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
//TODO change logic generate token
|
||||||
private String generateToken() {
|
private String generateToken() {
|
||||||
byte[] bytes = new byte[32];
|
byte[] bytes = new byte[32];
|
||||||
new SecureRandom().nextBytes(bytes);
|
new SecureRandom().nextBytes(bytes);
|
||||||
|
|||||||
Reference in New Issue
Block a user