validate login attempt
This commit is contained in:
@@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.dao;
|
|||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
||||||
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean;
|
import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.repositories.LoginAttemptRepository;
|
import net.gepafin.tendermanagement.repositories.LoginAttemptRepository;
|
||||||
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
||||||
@@ -29,7 +30,7 @@ public class LoginAttemptDao {
|
|||||||
loginAttemptRepository.save(loginAttemptEntity);
|
loginAttemptRepository.save(loginAttemptEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(Integer pageNo, Integer pageLimit) {
|
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(UserEntity userEntity, Integer pageNo, Integer pageLimit) {
|
||||||
if (pageLimit == null || pageLimit <= 0) {
|
if (pageLimit == null || pageLimit <= 0) {
|
||||||
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
|
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
|
||||||
}
|
}
|
||||||
@@ -38,7 +39,7 @@ public class LoginAttemptDao {
|
|||||||
pageNo = GepafinConstant.DEFAULT_PAGE;
|
pageNo = GepafinConstant.DEFAULT_PAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Page<LoginAttemptEntity> page = loginAttemptRepository.findAll(PageRequest.of(pageNo - 1, pageLimit, Sort.by(GepafinConstant.ATTEMPT_DATE).descending()));
|
Page<LoginAttemptEntity> page = loginAttemptRepository.findByHubId(userEntity.getHub().getId(), PageRequest.of(pageNo - 1, pageLimit, Sort.by(GepafinConstant.ATTEMPT_DATE).descending()));
|
||||||
List<LoginAttemptEntity> list = new ArrayList<>();
|
List<LoginAttemptEntity> list = new ArrayList<>();
|
||||||
for (LoginAttemptEntity loginAttemptEntity : page.getContent()) {
|
for (LoginAttemptEntity loginAttemptEntity : page.getContent()) {
|
||||||
list.add(loginAttemptEntity);
|
list.add(loginAttemptEntity);
|
||||||
|
|||||||
@@ -1,9 +1,19 @@
|
|||||||
package net.gepafin.tendermanagement.repositories;
|
package net.gepafin.tendermanagement.repositories;
|
||||||
|
|
||||||
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface LoginAttemptRepository extends JpaRepository<LoginAttemptEntity,Long> {
|
public interface LoginAttemptRepository extends JpaRepository<LoginAttemptEntity,Long> {
|
||||||
|
|
||||||
|
@Query("SELECT la FROM LoginAttemptEntity la LEFT JOIN UserEntity u ON u.email = la.username WHERE u.hub.id = :hubId")
|
||||||
|
Page<LoginAttemptEntity> findByHubId(@Param("hubId") Long hubId, PageRequest pageRequest);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface LoginAttemptService {
|
public interface LoginAttemptService {
|
||||||
|
|
||||||
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(Integer pageNo, Integer pageLimit);
|
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit);
|
||||||
|
|
||||||
void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request);
|
void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ package net.gepafin.tendermanagement.service.impl;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.dao.LoginAttemptDao;
|
import net.gepafin.tendermanagement.dao.LoginAttemptDao;
|
||||||
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
|
||||||
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
import net.gepafin.tendermanagement.enums.LoginAttemptResultEnum;
|
import net.gepafin.tendermanagement.enums.LoginAttemptResultEnum;
|
||||||
import net.gepafin.tendermanagement.enums.LoginAttemptTypeEnum;
|
import net.gepafin.tendermanagement.enums.LoginAttemptTypeEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.LoginAttemptReq;
|
import net.gepafin.tendermanagement.model.request.LoginAttemptReq;
|
||||||
import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean;
|
import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.service.LoginAttemptService;
|
import net.gepafin.tendermanagement.service.LoginAttemptService;
|
||||||
import net.gepafin.tendermanagement.util.Utils;
|
import net.gepafin.tendermanagement.util.Utils;
|
||||||
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -19,22 +22,30 @@ public class LoginAttemptServiceImpl implements LoginAttemptService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
LoginAttemptDao loginAttemptDao;
|
LoginAttemptDao loginAttemptDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Validator validator;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(Integer pageNo, Integer pageLimit) {
|
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit) {
|
||||||
return loginAttemptDao.getLoginAttemptsList(pageNo, pageLimit);
|
return loginAttemptDao.getLoginAttemptsList(validator.validateUser(request), pageNo, pageLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request) {
|
public void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request) {
|
||||||
String ipAddress = Utils.getClientIpAddress(request);
|
String ipAddress = Utils.getClientIpAddress(request);
|
||||||
String userAgent = request.getHeader("user-agent");
|
String userAgent = request.getHeader("user-agent");
|
||||||
|
|
||||||
LoginAttemptEntity loginAttemptEntity = new LoginAttemptEntity();
|
LoginAttemptEntity loginAttemptEntity = new LoginAttemptEntity();
|
||||||
loginAttemptEntity.setType(LoginAttemptTypeEnum.SWITCH.getValue());
|
loginAttemptEntity.setType(LoginAttemptTypeEnum.SWITCH.getValue());
|
||||||
loginAttemptEntity.setIpAddress(ipAddress);
|
loginAttemptEntity.setIpAddress(ipAddress);
|
||||||
loginAttemptEntity.setUserAgent(userAgent);
|
loginAttemptEntity.setUserAgent(userAgent);
|
||||||
loginAttemptEntity.setUsername(loginAttemptReq.getUserName());
|
loginAttemptEntity.setUsername(loginAttemptReq.getUserName());
|
||||||
loginAttemptEntity.setResult(LoginAttemptResultEnum.SUCCESS.getValue());
|
loginAttemptEntity.setResult(LoginAttemptResultEnum.SUCCESS.getValue());
|
||||||
|
if(loginAttemptReq.getUserId() != null) {
|
||||||
|
UserEntity userEntity = validator.validateUserId(request, loginAttemptReq.getUserId());
|
||||||
|
loginAttemptEntity.setUserId(userEntity.getId());
|
||||||
|
}
|
||||||
loginAttemptDao.createLoginAttempt(loginAttemptEntity);
|
loginAttemptDao.createLoginAttempt(loginAttemptEntity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public interface LoginAttemptApi {
|
|||||||
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE)}))})
|
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE)}))})
|
||||||
@GetMapping(value = "/login-attempt", produces = {"application/json"})
|
@GetMapping(value = "/login-attempt", produces = {"application/json"})
|
||||||
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
|
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
|
||||||
default ResponseEntity<LoginAttemptPageableResponseBean<List<LoginAttemptEntity>>> getLoginAttemptsList(
|
default ResponseEntity<LoginAttemptPageableResponseBean<List<LoginAttemptEntity>>> getLoginAttemptsList(HttpServletRequest request,
|
||||||
@ApiParam(value = "page number") @RequestParam(name = "pageNo", required = false) Integer pageNo,
|
@ApiParam(value = "page number") @RequestParam(name = "pageNo", required = false) Integer pageNo,
|
||||||
@ApiParam(value = "page limit") @RequestParam(name = "pageLimit", required = false) Integer pageLimit) {
|
@ApiParam(value = "page limit") @RequestParam(name = "pageLimit", required = false) Integer pageLimit) {
|
||||||
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
|
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ public class LoginAttemptApiController implements LoginAttemptApi {
|
|||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<LoginAttemptPageableResponseBean<List<LoginAttemptEntity>>> getLoginAttemptsList(Integer pageNo, Integer pageLimit) {
|
public ResponseEntity<LoginAttemptPageableResponseBean<List<LoginAttemptEntity>>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit) {
|
||||||
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> response = loginAttemptService.getLoginAttemptsList(pageNo, pageLimit);
|
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> response = loginAttemptService.getLoginAttemptsList(request, pageNo, pageLimit);
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(response);
|
return ResponseEntity.status(HttpStatus.OK).body(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user