validate login attempt

This commit is contained in:
rajesh
2024-10-25 11:10:07 +05:30
parent 93acc378d3
commit 4ef26827e7
6 changed files with 30 additions and 8 deletions

View File

@@ -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);

View File

@@ -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);
} }

View File

@@ -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);
} }

View File

@@ -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);
} }
} }

View File

@@ -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);

View File

@@ -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);
} }