All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.mosip.credentialstore.provider.impl.QrCodeProvider Maven / Gradle / Ivy
package io.mosip.credentialstore.provider.impl;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.mosip.credentialstore.constants.JsonConstants;
import io.mosip.credentialstore.constants.LoggerFileConstant;
import io.mosip.credentialstore.dto.AllowedKycDto;
import io.mosip.credentialstore.dto.DataProviderResponse;
import io.mosip.credentialstore.exception.ApiNotAccessibleException;
import io.mosip.credentialstore.exception.CredentialFormatterException;
import io.mosip.credentialstore.exception.DataEncryptionFailureException;
import io.mosip.credentialstore.provider.CredentialProvider;
import io.mosip.credentialstore.util.EncryptionUtil;
import io.mosip.credentialstore.util.Utilities;
import io.mosip.idrepository.core.dto.CredentialServiceRequestDto;
import io.mosip.idrepository.core.logger.IdRepoLogger;
import io.mosip.idrepository.core.security.IdRepoSecurityManager;
import io.mosip.kernel.core.exception.ExceptionUtils;
import io.mosip.kernel.core.logger.spi.Logger;
import io.mosip.kernel.core.util.DateUtils;
@Component
public class QrCodeProvider extends CredentialProvider {
@Autowired
EncryptionUtil encryptionUtil;
/** The utilities. */
@Autowired
Utilities utilities;
/** The Constant DATETIME_PATTERN. */
public static final String DATETIME_PATTERN = "mosip.credential.service.datetime.pattern";
@Autowired
private Environment env;
@Autowired
private ObjectMapper mapper;
private static final Logger LOGGER = IdRepoLogger.getLogger(QrCodeProvider.class);
@SuppressWarnings("unchecked")
@Override
public DataProviderResponse getFormattedCredentialData(
CredentialServiceRequestDto credentialServiceRequestDto, Map sharableAttributeMap)
throws CredentialFormatterException {
String requestId = credentialServiceRequestDto.getRequestId();
DataProviderResponse dataProviderResponse = null;
try {
LOGGER.debug(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
"Formatting credential data");
String pin = credentialServiceRequestDto.getEncryptionKey();
Map formattedMap = new HashMap<>();
List protectedAttributes = new ArrayList<>();
formattedMap.put(JsonConstants.ID, credentialServiceRequestDto.getId());
for (Map.Entry entry : sharableAttributeMap.entrySet()) {
AllowedKycDto allowedKycDto = entry.getKey();
String attributeName = allowedKycDto.getAttributeName();
Object value = entry.getValue();
String valueStr = null;
if (value instanceof String) {
valueStr = value.toString();
} else {
valueStr = mapper.writeValueAsString(value);
}
formattedMap.put(attributeName, valueStr);
if (allowedKycDto.isEncrypted() || credentialServiceRequestDto.isEncrypt()) {
if (!valueStr.isEmpty()) {
String encryptedValue = encryptionUtil.encryptDataWithPin(attributeName, valueStr, pin, requestId);
formattedMap.put(attributeName, encryptedValue);
protectedAttributes.add(attributeName);
}
} else {
formattedMap.put(attributeName, valueStr);
}
}
String credentialId = utilities.generateId();
dataProviderResponse = new DataProviderResponse();
DateTimeFormatter format = DateTimeFormatter.ofPattern(env.getProperty(DATETIME_PATTERN));
LocalDateTime localdatetime = LocalDateTime
.parse(DateUtils.getUTCCurrentDateTimeString(env.getProperty(DATETIME_PATTERN)), format);
JSONObject json = new JSONObject();
List typeList = new ArrayList<>();
typeList.add(env.getProperty("mosip.credential.service.credential.schema"));
json.put(JsonConstants.ID, env.getProperty("mosip.credential.service.format.id") + credentialId);
json.put(JsonConstants.TYPE, typeList);
json.put(JsonConstants.ISSUER, env.getProperty("mosip.credential.service.format.issuer"));
json.put(JsonConstants.ISSUANCEDATE, DateUtils.formatToISOString(localdatetime));
json.put(JsonConstants.ISSUEDTO, credentialServiceRequestDto.getIssuer());
json.put(JsonConstants.CONSENT, "");
json.put(JsonConstants.CREDENTIALSUBJECT, formattedMap);
json.put(JsonConstants.PROTECTEDATTRIBUTES, protectedAttributes);
dataProviderResponse.setJSON(json);
dataProviderResponse.setCredentialId(credentialId);
dataProviderResponse.setIssuanceDate(localdatetime);
LOGGER.debug(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
"end formatting credential data");
return dataProviderResponse;
} catch (DataEncryptionFailureException e) {
LOGGER.error(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
ExceptionUtils.getStackTrace(e));
throw new CredentialFormatterException(e);
} catch (ApiNotAccessibleException e) {
LOGGER.error(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
ExceptionUtils.getStackTrace(e));
throw new CredentialFormatterException(e);
} catch (JsonProcessingException e) {
LOGGER.error(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
ExceptionUtils.getStackTrace(e));
throw new CredentialFormatterException(e);
} catch (Exception e) {
LOGGER.error(IdRepoSecurityManager.getUser(), LoggerFileConstant.REQUEST_ID.toString(), requestId,
ExceptionUtils.getStackTrace(e));
throw new CredentialFormatterException(e);
}
}
}