io.mosip.admin.packetstatusupdater.util.AuditUtil Maven / Gradle / Ivy
package io.mosip.admin.packetstatusupdater.util;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.mosip.admin.packetstatusupdater.constant.AuditErrorCode;
import io.mosip.admin.packetstatusupdater.dto.AuditRequestDto;
import io.mosip.admin.packetstatusupdater.dto.AuditResponseDto;
import io.mosip.admin.packetstatusupdater.exception.MasterDataServiceException;
import io.mosip.admin.packetstatusupdater.exception.ValidationException;
import io.mosip.kernel.core.authmanager.exception.AuthNException;
import io.mosip.kernel.core.authmanager.exception.AuthZException;
import io.mosip.kernel.core.exception.ExceptionUtils;
import io.mosip.kernel.core.exception.ServiceError;
import io.mosip.kernel.core.http.RequestWrapper;
import io.mosip.kernel.core.http.ResponseWrapper;
import io.mosip.kernel.core.util.DateUtils;
/**
* AuditUtil.
*/
@Component
public class AuditUtil {
/** The Constant APPLICATION_ID. */
private static final String APPLICATION_ID = "10009";
/** The Constant APPLICATION_NAME. */
private static final String APPLICATION_NAME = "Admin_Portal";
/** The Constant UNKNOWN_HOST. */
private static final String UNKNOWN_HOST = "Unknown Host";
private String hostIpAddress = null;
private String hostName = null;
private volatile AtomicInteger eventCounter;
@Value("${mosip.kernel.masterdata.audit-url}")
private String auditUrl;
@Autowired
private RestTemplate restTemplate;
@Autowired
private ObjectMapper objectMapper;
/**
* Audit request.
*
* @param auditRequestDto
* the audit request dto
*/
@PostConstruct
private void init() {
if(System.getProperty("seqGen")==null) {
eventCounter = new AtomicInteger(500);
}else {
Integer eventCount=Integer.getInteger(System.getProperty("seqGen"));
eventCounter=new AtomicInteger(eventCount);
}
}
/**
* Validate security context holder.
*
* @return true, if successful
*/
private boolean validateSecurityContextHolder() {
Predicate contextPredicate = i -> SecurityContextHolder.getContext() != null;
Predicate authPredicate = i -> SecurityContextHolder.getContext()
.getAuthentication() != null;
Predicate principlePredicate = i -> SecurityContextHolder.getContext()
.getAuthentication().getPrincipal() != null;
return contextPredicate.and(authPredicate).and(principlePredicate) != null;
}
/**
* Gets the server ip.
*
* @return the server ip
*/
public String getServerIp() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
return UNKNOWN_HOST;
}
}
/**
* Gets the server name.
*
* @return the server name
*/
public String getServerName() {
try {
return InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
return UNKNOWN_HOST;
}
}
/**
* To Set the Host Ip & Host Name
*/
@PostConstruct
public void getHostDetails() {
hostIpAddress = getServerIp();
hostName = getServerName();
}
/**
* For Auditing Login Services
*
* @param auditRequestDto
* @param token
* @return
*/
public void callAuditManager(AuditRequestDto auditRequestDto) {
RequestWrapper auditReuestWrapper = new RequestWrapper<>();
auditReuestWrapper.setRequest(auditRequestDto);
HttpEntity> httpEntity = new HttpEntity<>(auditReuestWrapper);
ResponseEntity response = null;
try {
response = restTemplate.exchange(auditUrl, HttpMethod.POST, httpEntity, String.class);
} catch (HttpClientErrorException | HttpServerErrorException ex) {
handlException(ex);
}
String responseBody = response.getBody();
getAuditDetailsFromResponse(responseBody);
}
private AuditResponseDto getAuditDetailsFromResponse(String responseBody) {
List validationErrorsList = null;
validationErrorsList = ExceptionUtils.getServiceErrorList(responseBody);
AuditResponseDto auditResponseDto = null;
if (!validationErrorsList.isEmpty()) {
throw new ValidationException(validationErrorsList);
}
ResponseWrapper responseObject = null;
try {
responseObject = objectMapper.readValue(responseBody,
new TypeReference>() {
});
auditResponseDto = responseObject.getResponse();
} catch (IOException | NullPointerException exception) {
throw new MasterDataServiceException(AuditErrorCode.AUDIT_PARSE_EXCEPTION.getErrorCode(),
AuditErrorCode.AUDIT_PARSE_EXCEPTION.getErrorMessage());
}
return auditResponseDto;
}
private void handlException(HttpStatusCodeException ex) {
List validationErrorsList = ExceptionUtils.getServiceErrorList(ex.getResponseBodyAsString());
if (ex.getRawStatusCode() == 401) {
if (!validationErrorsList.isEmpty()) {
throw new AuthNException(validationErrorsList);
} else {
throw new BadCredentialsException("Authentication failed from AuthManager");
}
}
if (ex.getRawStatusCode() == 403) {
if (!validationErrorsList.isEmpty()) {
throw new AuthZException(validationErrorsList);
} else {
throw new AccessDeniedException("Access denied from AuthManager");
}
}
throw new MasterDataServiceException(AuditErrorCode.AUDIT_EXCEPTION.getErrorCode(),
AuditErrorCode.AUDIT_EXCEPTION.getErrorMessage() + ex);
}
public void setAuditRequestDto(EventEnum eventEnum) {
AuditRequestDto auditRequestDto = new AuditRequestDto();
auditRequestDto.setHostIp(hostIpAddress);
auditRequestDto.setHostName(hostName);
auditRequestDto.setApplicationId(eventEnum.getApplicationId());
auditRequestDto.setApplicationName(eventEnum.getApplicationName());
auditRequestDto.setSessionUserId(SecurityContextHolder.getContext().getAuthentication().getName());
auditRequestDto.setSessionUserName(SecurityContextHolder.getContext().getAuthentication().getName());
auditRequestDto.setCreatedBy(SecurityContextHolder.getContext().getAuthentication().getName());
auditRequestDto.setActionTimeStamp(DateUtils.getUTCCurrentDateTime());
auditRequestDto.setDescription(eventEnum.getDescription());
auditRequestDto.setEventType(eventEnum.getType());
auditRequestDto.setEventName(eventEnum.getName());
auditRequestDto.setModuleId(eventEnum.getModuleId());
auditRequestDto.setModuleName(eventEnum.getModuleName());
auditRequestDto.setEventId(eventEnum.getEventId());
auditRequestDto.setId(eventEnum.getId());
auditRequestDto.setIdType(eventEnum.getIdType());
callAuditManager(auditRequestDto);
}
}