All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.mosip.authentication.common.service.integration.PartnerServiceManager Maven / Gradle / Ivy

package io.mosip.authentication.common.service.integration;

import java.io.IOException;
import java.util.Optional;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.mosip.authentication.common.service.entity.ApiKeyData;
import io.mosip.authentication.common.service.entity.MispLicenseData;
import io.mosip.authentication.common.service.entity.PartnerData;
import io.mosip.authentication.common.service.entity.PartnerMapping;
import io.mosip.authentication.common.service.entity.PolicyData;
import io.mosip.authentication.common.service.repository.ApiKeyDataRepository;
import io.mosip.authentication.common.service.repository.MispLicenseDataRepository;
import io.mosip.authentication.common.service.repository.PartnerDataRepository;
import io.mosip.authentication.common.service.repository.PartnerMappingRepository;
import io.mosip.authentication.common.service.repository.PolicyDataRepository;
import io.mosip.authentication.common.service.transaction.manager.IdAuthSecurityManager;
import io.mosip.authentication.core.constant.IdAuthCommonConstants;
import io.mosip.authentication.core.constant.IdAuthenticationErrorConstants;
import io.mosip.authentication.core.exception.IdAuthenticationBusinessException;
import io.mosip.authentication.core.partner.dto.PartnerPolicyResponseDTO;
import io.mosip.authentication.core.partner.dto.PolicyDTO;
import io.mosip.kernel.core.util.DateUtils;
import io.mosip.kernel.core.websub.model.EventModel;

/**
 * This class Partner Service Manager connects to partner service to validate
 * and get the policy file for a given partnerID, partner api key and misp
 * license key.
 *
 * @author Nagarjuna
 *
 */
@Component
@Transactional
public class PartnerServiceManager {

	/** The Constant API_KEY_DATA. */
	private static final String API_KEY_DATA = "apiKeyData";

	/** The Constant PARTNER_DATA. */
	private static final String PARTNER_DATA = "partnerData";

	/** The Constant POLICY_DATA. */
	private static final String POLICY_DATA = "policyData";

	/** The Constant MISP_LICENSE_DATA. */
	private static final String MISP_LICENSE_DATA = "mispLicenseData";

	/** The partner mapping repo. */
	@Autowired
	private PartnerMappingRepository partnerMappingRepo;

	/** The partner data repo. */
	@Autowired
	private PartnerDataRepository partnerDataRepo;

	/** The policy data repo. */
	@Autowired
	private PolicyDataRepository policyDataRepo;

	/** The api key repo. */
	@Autowired
	private ApiKeyDataRepository apiKeyRepo;

	/** The misp lic data repo. */
	@Autowired
	private MispLicenseDataRepository mispLicDataRepo;

	/** The mapper. */
	@Autowired
	private ObjectMapper mapper;

	/** The security manager. */
	@Autowired
	private IdAuthSecurityManager securityManager;

	/**
	 * Validate and get policy.
	 *
	 * @param partnerId the partner id
	 * @param partner_api_key the partner api key
	 * @param misp_license_key the misp license key
	 * @param certificateNeeded the certificate needed
	 * @return the partner policy response DTO
	 * @throws IdAuthenticationBusinessException the id authentication business exception
	 */
	public PartnerPolicyResponseDTO validateAndGetPolicy(String partnerId, String partner_api_key, String misp_license_key,
														 boolean certificateNeeded) throws IdAuthenticationBusinessException {
		Optional partnerMappingDataOptional = partnerMappingRepo.findByPartnerIdAndApiKeyId(partnerId, partner_api_key);
		Optional mispLicOptional = mispLicDataRepo.findByLicenseKey(misp_license_key);
		validatePartnerMappingDetails(partnerMappingDataOptional, mispLicOptional);
		PartnerPolicyResponseDTO response = new PartnerPolicyResponseDTO();
		PartnerMapping partnerMapping = partnerMappingDataOptional.get();
		PartnerData partnerData = partnerMapping.getPartnerData();
		PolicyData policyData = partnerMapping.getPolicyData();
		ApiKeyData apiKeyData = partnerMapping.getApiKeyData();
		MispLicenseData mispLicenseData = mispLicOptional.get();
		response.setPolicyId(policyData.getPolicyId());
		response.setPolicyName(policyData.getPolicyName());
		response.setPolicy(mapper.convertValue(policyData.getPolicy(), PolicyDTO.class));
		response.setPolicyDescription(policyData.getPolicyDescription());
		response.setPolicyStatus(policyData.getPolicyStatus().contentEquals("ACTIVE"));
		response.setPartnerId(partnerData.getPartnerId());
		response.setPartnerName(partnerData.getPartnerName());
		if (certificateNeeded) {
			response.setCertificateData(partnerData.getCertificateData());
		}
		response.setPolicyExpiresOn(policyData.getPolicyExpiresOn());
		response.setApiKeyExpiresOn(apiKeyData.getApiKeyExpiresOn());
		response.setMispExpiresOn(mispLicenseData.getMispExpiresOn());
		return response;
	}

	/**
	 * Validate partner mapping details.
	 *
	 * @param partnerMappingDataOptional the partner mapping data optional
	 * @param mispLicOptional the misp lic optional
	 * @throws IdAuthenticationBusinessException the id authentication business exception
	 */
	private void validatePartnerMappingDetails(Optional partnerMappingDataOptional,
											   Optional mispLicOptional) throws IdAuthenticationBusinessException {
		if (partnerMappingDataOptional.isPresent() && !partnerMappingDataOptional.get().isDeleted()) {
			PartnerMapping partnerMapping = partnerMappingDataOptional.get();
			if (partnerMapping.getPartnerData().isDeleted()) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorMessage());
			}
			if (!partnerMapping.getPartnerData().getPartnerStatus().contentEquals("ACTIVE")) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_DEACTIVATED.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_DEACTIVATED.getErrorMessage());
			}
			if (partnerMapping.getPolicyData().isDeleted()) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.INVALID_POLICY_ID.getErrorCode(),
						IdAuthenticationErrorConstants.INVALID_POLICY_ID.getErrorMessage());
			}
			if (!partnerMapping.getPolicyData().getPolicyStatus().contentEquals("ACTIVE")) {
				throw new IdAuthenticationBusinessException(
						IdAuthenticationErrorConstants.PARTNER_POLICY_NOT_ACTIVE.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_POLICY_NOT_ACTIVE.getErrorMessage());
			}
			if (partnerMapping.getPolicyData().getPolicyCommenceOn().isAfter(DateUtils.getUTCCurrentDateTime())
					|| partnerMapping.getPolicyData().getPolicyExpiresOn()
					.isBefore(DateUtils.getUTCCurrentDateTime())) {
				throw new IdAuthenticationBusinessException(
						IdAuthenticationErrorConstants.PARTNER_POLICY_NOT_ACTIVE.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_POLICY_NOT_ACTIVE.getErrorMessage());
			}
			if (partnerMapping.getApiKeyData().isDeleted()) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorMessage());
			}
			if (!partnerMapping.getApiKeyData().getApiKeyStatus().contentEquals("ACTIVE")) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_DEACTIVATED.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_DEACTIVATED.getErrorMessage());
			}
			if (partnerMapping.getApiKeyData().getApiKeyCommenceOn().isAfter(DateUtils.getUTCCurrentDateTime())
					|| partnerMapping.getApiKeyData().getApiKeyExpiresOn()
					.isBefore(DateUtils.getUTCCurrentDateTime())) {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorCode(),
						IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorMessage());
			}
			if (mispLicOptional.isPresent()) {
				MispLicenseData mispLicenseData = mispLicOptional.get();
				if (mispLicenseData.isDeleted()) {
					throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorCode(),
							IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorMessage());
				}
				if (!mispLicenseData.getMispStatus().contentEquals("ACTIVE")) {
					throw new IdAuthenticationBusinessException(
							IdAuthenticationErrorConstants.LICENSEKEY_SUSPENDED.getErrorCode(),
							IdAuthenticationErrorConstants.LICENSEKEY_SUSPENDED.getErrorMessage());
				}
				if (mispLicenseData.getMispCommenceOn().isAfter(DateUtils.getUTCCurrentDateTime())) {
					// TODO need to throw different exception for misp not active
					throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorCode(),
							IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorMessage());
				}
				if (mispLicenseData.getMispExpiresOn().isBefore(DateUtils.getUTCCurrentDateTime())) {
					throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.LICENSEKEY_EXPIRED.getErrorCode(),
							IdAuthenticationErrorConstants.LICENSEKEY_EXPIRED.getErrorMessage());
				}
			} else {
				throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorCode(),
						IdAuthenticationErrorConstants.INVALID_LICENSEKEY.getErrorMessage());
			}
		} else {
			throw new IdAuthenticationBusinessException(IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorCode(),
					IdAuthenticationErrorConstants.PARTNER_NOT_REGISTERED.getErrorMessage());
		}
	}

	/**
	 * Handle api key approved.
	 *
	 * @param eventModel the event model
	 * @throws JsonParseException the json parse exception
	 * @throws JsonMappingException the json mapping exception
	 * @throws IOException Signals that an I/O exception has occurred.
	 */
	public void handleApiKeyApproved(EventModel eventModel) throws JsonParseException, JsonMappingException, IOException {
		PartnerMapping mapping = new PartnerMapping();
		PartnerData partnerEventData = mapper.convertValue(eventModel.getEvent().getData().get(PARTNER_DATA),
				PartnerData.class);
		mapping.setPartnerId(partnerEventData.getPartnerId());
		partnerEventData.setCreatedBy(getCreatedBy(eventModel));
		partnerEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
		ApiKeyData apiKeyEventData = mapper.convertValue(eventModel.getEvent().getData().get(API_KEY_DATA),
				ApiKeyData.class);
		mapping.setApiKeyId(apiKeyEventData.getApiKeyId());
		apiKeyEventData.setCreatedBy(getCreatedBy(eventModel));
		apiKeyEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
		PolicyData policyEventData = mapper.convertValue(eventModel.getEvent().getData().get(POLICY_DATA),
				PolicyData.class);
		mapping.setPolicyId(policyEventData.getPolicyId());
		policyEventData.setCreatedBy(getCreatedBy(eventModel));
		policyEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
		mapping.setCreatedBy(getCreatedBy(eventModel));
		mapping.setCrDTimes(DateUtils.getUTCCurrentDateTime());
		partnerDataRepo.save(partnerEventData);
		apiKeyRepo.save(apiKeyEventData);
		policyDataRepo.save(policyEventData);
		partnerMappingRepo.save(mapping);
	}


	/**
	 * Gets the created by.
	 *
	 * @param eventModel the event model
	 * @return the created by
	 */
	private String getCreatedBy(EventModel eventModel) {
		//Get user from session
		String user = securityManager.getUser();
		if (user == null || user.isEmpty()) {
			//Get publisher from event
			String publisher = eventModel.getPublisher();
			if (publisher == null || publisher.isEmpty()) {
				//return as created by IDA
				return IdAuthCommonConstants.IDA;
			} else {
				return publisher;
			}
		} else {
			return user;
		}
	}

	/**
	 * Handle api key updated.
	 *
	 * @param eventModel the event model
	 * @throws JsonParseException the json parse exception
	 * @throws JsonMappingException the json mapping exception
	 * @throws IOException Signals that an I/O exception has occurred.
	 */
	public void handleApiKeyUpdated(EventModel eventModel)
			throws JsonParseException, JsonMappingException, IOException {
		ApiKeyData apiKeyEventData = mapper.convertValue(eventModel.getEvent().getData().get(API_KEY_DATA),
				ApiKeyData.class);
		Optional apiKeyDataOptional = apiKeyRepo.findById(apiKeyEventData.getApiKeyId());
		if (apiKeyDataOptional.isPresent()) {
			ApiKeyData apiKeyData = apiKeyDataOptional.get();
			apiKeyData.setApiKeyCommenceOn(apiKeyEventData.getApiKeyCommenceOn());
			apiKeyData.setApiKeyExpiresOn(apiKeyEventData.getApiKeyExpiresOn());
			apiKeyData.setApiKeyStatus(apiKeyEventData.getApiKeyStatus());
			apiKeyData.setUpdatedBy(getCreatedBy(eventModel));
			apiKeyData.setUpdDTimes(DateUtils.getUTCCurrentDateTime());
			apiKeyRepo.save(apiKeyData);
		} else {
			apiKeyEventData.setCreatedBy(getCreatedBy(eventModel));
			apiKeyEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
			apiKeyRepo.save(apiKeyEventData);
		}
	}

	/**
	 * Update partner data.
	 *
	 * @param eventModel the event model
	 */
	public void updatePartnerData(EventModel eventModel) {
		PartnerData partnerEventData = mapper.convertValue(eventModel.getEvent().getData().get(PARTNER_DATA), PartnerData.class);
		Optional partnerDataOptional = partnerDataRepo.findById(partnerEventData.getPartnerId());
		if (partnerDataOptional.isPresent()) {
			PartnerData partnerData = partnerDataOptional.get();
			partnerData.setPartnerId(partnerEventData.getPartnerId());
			partnerData.setPartnerName(partnerEventData.getPartnerName());
			partnerData.setCertificateData(partnerEventData.getCertificateData());
			partnerData.setPartnerStatus(partnerEventData.getPartnerStatus());
			partnerData.setUpdatedBy(getCreatedBy(eventModel));
			partnerData.setUpdDTimes(DateUtils.getUTCCurrentDateTime());
			partnerDataRepo.save(partnerData);
		} else {
			partnerEventData.setCreatedBy(getCreatedBy(eventModel));
			partnerEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
			partnerDataRepo.save(partnerEventData);
		}
	}

	/**
	 * Update policy data.
	 *
	 * @param eventModel the event model
	 */
	public void updatePolicyData(EventModel eventModel) {
		PolicyData policyEventData = mapper.convertValue(eventModel.getEvent().getData().get(POLICY_DATA), PolicyData.class);
		Optional policyDataOptional = policyDataRepo.findById(policyEventData.getPolicyId());
		if (policyDataOptional.isPresent()) {
			PolicyData policyData = policyDataOptional.get();
			policyData.setUpdatedBy(getCreatedBy(eventModel));
			policyData.setUpdDTimes(DateUtils.getUTCCurrentDateTime());
			policyData.setPolicyId(policyEventData.getPolicyId());
			policyData.setPolicy(policyEventData.getPolicy());
			policyData.setPolicyName(policyEventData.getPolicyName());
			policyData.setPolicyStatus(policyEventData.getPolicyStatus());
			policyData.setPolicyDescription(policyEventData.getPolicyDescription());
			policyData.setPolicyCommenceOn(policyEventData.getPolicyCommenceOn());
			policyData.setPolicyExpiresOn(policyEventData.getPolicyExpiresOn());
			policyDataRepo.save(policyData);
		} else {
			policyEventData.setCreatedBy(getCreatedBy(eventModel));
			policyEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
			policyDataRepo.save(policyEventData);
		}
	}

	/**
	 * Update misp license data.
	 *
	 * @param eventModel the event model
	 */
	public void updateMispLicenseData(EventModel eventModel) {
		MispLicenseData mispLicenseEventData = mapper.convertValue(eventModel.getEvent().getData().get(MISP_LICENSE_DATA), MispLicenseData.class);
		Optional mispLicenseDataOptional = mispLicDataRepo.findById(mispLicenseEventData.getMispId());
		if (mispLicenseDataOptional.isPresent()) {
			MispLicenseData mispLicenseData = mispLicenseDataOptional.get();
			mispLicenseData.setUpdatedBy(getCreatedBy(eventModel));
			mispLicenseData.setUpdDTimes(DateUtils.getUTCCurrentDateTime());
			mispLicenseData.setMispId(mispLicenseEventData.getMispId());
			mispLicenseData.setLicenseKey(mispLicenseEventData.getLicenseKey());
			mispLicenseData.setMispCommenceOn(mispLicenseEventData.getMispCommenceOn());
			mispLicenseData.setMispExpiresOn(mispLicenseEventData.getMispExpiresOn());
			mispLicenseData.setMispStatus(mispLicenseEventData.getMispStatus());
			mispLicDataRepo.save(mispLicenseData);
		} else {
			mispLicenseEventData.setCreatedBy(getCreatedBy(eventModel));
			mispLicenseEventData.setCrDTimes(DateUtils.getUTCCurrentDateTime());
			mispLicDataRepo.save(mispLicenseEventData);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy