From 0e99dcf8671e7fa95bc8229f17a436a3582488bf Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:40:47 +0530 Subject: [PATCH 01/11] MOSIP-30419 Fixed update count Issue (#842) Signed-off-by: kameshsr --- .../service/impl/IdRepoServiceImpl.java | 87 +++++++++---------- 1 file changed, 42 insertions(+), 45 deletions(-) diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index 48328c138..7a3539362 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -1,47 +1,5 @@ package io.mosip.idrepository.identity.service.impl; -import static io.mosip.idrepository.core.constant.IdRepoConstants.CBEFF_FORMAT; -import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_FORMAT_ATTRIBUTE; -import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_NAME_ATTRIBUTE; -import static io.mosip.idrepository.core.constant.IdRepoConstants.SPLITTER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.ID_OBJECT_PROCESSING_FAILED; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; - -import java.io.IOException; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Resource; - -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.skyscreamer.jsonassert.FieldComparisonFailure; -import org.skyscreamer.jsonassert.JSONCompare; -import org.skyscreamer.jsonassert.JSONCompareMode; -import org.skyscreamer.jsonassert.JSONCompareResult; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -55,7 +13,6 @@ import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; - import io.mosip.idrepository.core.constant.CredentialRequestStatusLifecycle; import io.mosip.idrepository.core.constant.IdType; import io.mosip.idrepository.core.dto.DocumentsDTO; @@ -94,6 +51,46 @@ import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.kernel.core.util.DateUtils; import io.mosip.kernel.core.util.UUIDUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.skyscreamer.jsonassert.FieldComparisonFailure; +import org.skyscreamer.jsonassert.JSONCompare; +import org.skyscreamer.jsonassert.JSONCompareMode; +import org.skyscreamer.jsonassert.JSONCompareResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static io.mosip.idrepository.core.constant.IdRepoConstants.CBEFF_FORMAT; +import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_FORMAT_ATTRIBUTE; +import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_NAME_ATTRIBUTE; +import static io.mosip.idrepository.core.constant.IdRepoConstants.SPLITTER; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.ID_OBJECT_PROCESSING_FAILED; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; /** * The Class IdRepoServiceImpl - Service implementation for Identity service. @@ -515,8 +512,8 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum private void updateCount(Map updateCountTrackerMap, String attribute) { if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { updateCountTrackerMap.compute(attribute, - (k, v) -> (Objects.nonNull(v) ? ++v : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) - ? (Objects.nonNull(v) ? ++v : 1) + (k, v) -> (Objects.nonNull(v) ? v+1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) + ? (Objects.nonNull(v) ? v+1 : 1) : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); } } From cbf1284d9afa75112efeec269d64e69dddbfa14d Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Fri, 1 Dec 2023 13:21:46 +0530 Subject: [PATCH 02/11] MOSIP-30420 Fixed update identity issue (#843) * MOSIP-30419 Fixed update count Issue Signed-off-by: kameshsr * MOSIP-30420 Fixed update identity issue Signed-off-by: kameshsr --------- Signed-off-by: kameshsr --- .../service/impl/IdRepoServiceImpl.java | 54 +++++++++---------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index 7a3539362..4023c4598 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -79,7 +79,7 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; -import java.util.function.Consumer; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -485,21 +485,22 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum JSONCompareResult comparisonResult) throws JSONException, IOException, IdRepoAppException { Entry> updateCountTracker = getUpdateCountTracker(uinHash, dbData); Map updateCountTrackerMap = updateCountTracker.getValue(); - Consumer incrementUpdateCountForAttribute = attribute -> updateCount(updateCountTrackerMap, attribute); + Set attribute = new HashSet<>(); + if (comparisonResult.isMissingOnField()) { - updateMissingFields(dbData, comparisonResult, incrementUpdateCountForAttribute); + updateMissingFields(dbData, comparisonResult, attribute); } comparisonResult = JSONCompare.compareJSON(inputData.jsonString(), dbData.jsonString(), JSONCompareMode.LENIENT); if (comparisonResult.isFailureOnField()) { - updateFailingFields(inputData, dbData, comparisonResult, incrementUpdateCountForAttribute); + updateFailingFields(inputData, dbData, comparisonResult, attribute); } comparisonResult = JSONCompare.compareJSON(inputData.jsonString(), dbData.jsonString(), JSONCompareMode.LENIENT); if (!comparisonResult.getMessage().isEmpty()) { - updateMissingValues(inputData, dbData, comparisonResult, incrementUpdateCountForAttribute); + updateMissingValues(inputData, dbData, comparisonResult, attribute); } - + updateCount(updateCountTrackerMap, attribute); comparisonResult = JSONCompare.compareJSON(inputData.jsonString(), dbData.jsonString(), JSONCompareMode.LENIENT); if (comparisonResult.failed()) { // Code should never reach here @@ -509,12 +510,14 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum .encodeToURLSafeBase64(mapper.writeValueAsString(updateCountTrackerMap).getBytes()).getBytes())); } - private void updateCount(Map updateCountTrackerMap, String attribute) { - if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { - updateCountTrackerMap.compute(attribute, - (k, v) -> (Objects.nonNull(v) ? v+1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) - ? (Objects.nonNull(v) ? v+1 : 1) - : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); + private void updateCount(Map updateCountTrackerMap, Set attributeSet) { + for(String attribute: attributeSet) { + if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { + updateCountTrackerMap.compute(attribute, + (k, v) -> (Objects.nonNull(v) ? v + 1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) + ? (Objects.nonNull(v) ? v + 1 : 1) + : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); + } } } @@ -536,12 +539,11 @@ private Entry> getUpdateCountTracker(String uinHash * * @param dbData the db data * @param comparisonResult the comparison result - * @param isUpdateAllowedAsPerPolicy * @throws IdRepoAppException the id repo app exception */ @SuppressWarnings({ "unchecked", "rawtypes" }) private void updateMissingFields(DocumentContext dbData, JSONCompareResult comparisonResult, - Consumer incrementUpdateCountForAttribute) { + Set attribute) { for (FieldComparisonFailure failure : comparisonResult.getFieldMissing()) { if (StringUtils.contains(failure.getField(), OPEN_SQUARE_BRACE)) { String path = StringUtils.substringBefore(failure.getField(), OPEN_SQUARE_BRACE); @@ -552,7 +554,7 @@ private void updateMissingFields(DocumentContext dbData, JSONCompareResult compa key = path; path = ROOT; } - incrementUpdateCountForAttribute.accept(key); + attribute.add(key); List value = dbData.read(path + DOT + key, List.class); value.addAll(Collections .singletonList(convertToObject(failure.getExpected().toString().getBytes(), Map.class))); @@ -564,7 +566,7 @@ private void updateMissingFields(DocumentContext dbData, JSONCompareResult compa path = ROOT; } String key = StringUtils.substringAfterLast(failure.getField(), DOT); - incrementUpdateCountForAttribute.accept(key); + attribute.add(key); dbData.put(path, (String) failure.getExpected(), key); } } @@ -576,12 +578,11 @@ private void updateMissingFields(DocumentContext dbData, JSONCompareResult compa * @param inputData the input data * @param dbData the db data * @param comparisonResult the comparison result - * @param isUpdateAllowedAsPerPolicy - * @return + * @return * @throws IdRepoAppException the id repo app exception */ private void updateFailingFields(DocumentContext inputData, DocumentContext dbData, - JSONCompareResult comparisonResult, Consumer incrementUpdateCountForAttribute) { + JSONCompareResult comparisonResult, Set attribute) { for (FieldComparisonFailure failure : comparisonResult.getFieldFailures()) { String path = StringUtils.substringBeforeLast(failure.getField(), DOT); @@ -596,7 +597,7 @@ private void updateFailingFields(DocumentContext inputData, DocumentContext dbDa key = failure.getField(); path = ROOT; } - incrementUpdateCountForAttribute.accept(StringUtils.substringBefore(failure.getField(), OPEN_SQUARE_BRACE)); + attribute.add(StringUtils.substringBefore(failure.getField(), OPEN_SQUARE_BRACE)); if (failure.getExpected() instanceof JSONArray) { dbData.put(path, key, convertToObject(failure.getExpected().toString().getBytes(), List.class)); inputData.put(path, key, convertToObject(failure.getExpected().toString().getBytes(), List.class)); @@ -621,12 +622,11 @@ private void updateFailingFields(DocumentContext inputData, DocumentContext dbDa * @param inputData the input data * @param dbData the db data * @param comparisonResult the comparison result - * @param incrementUpdateCountForAttribute - * @return + * @return */ @SuppressWarnings("unchecked") private void updateMissingValues(DocumentContext inputData, DocumentContext dbData, - JSONCompareResult comparisonResult, Consumer incrementUpdateCountForAttribute) { + JSONCompareResult comparisonResult, Set attribute) { String path = StringUtils.substringBefore(comparisonResult.getMessage(), OPEN_SQUARE_BRACE); String key = StringUtils.substringAfterLast(path, DOT); path = StringUtils.substringBeforeLast(path, DOT); @@ -635,7 +635,7 @@ private void updateMissingValues(DocumentContext inputData, DocumentContext dbDa key = path; path = ROOT; } - incrementUpdateCountForAttribute.accept(key); + attribute.add(key); JsonPath jsonPath = JsonPath.compile(path + DOT + key); List> dbDataList = dbData.read(path + DOT + key, List.class); List> inputDataList = inputData.read(path + DOT + key, List.class); @@ -646,14 +646,13 @@ private void updateMissingValues(DocumentContext inputData, DocumentContext dbDa dbDataList.stream() .filter(map -> map.containsKey(LANGUAGE) && inputDataList.stream().filter(inputDataMap -> inputDataMap.containsKey(LANGUAGE)).allMatch( - inputDataMap -> !StringUtils.equalsIgnoreCase(inputDataMap.get(LANGUAGE), map.get(LANGUAGE)))) + inputDataMap -> !StringUtils.equalsIgnoreCase(inputDataMap.get(LANGUAGE), map.get(LANGUAGE)))) .forEach(value -> inputData.add(jsonPath, value)); } /** * Update documents. * - * @param uinHash the uin hash * @param uinObject the uin object * @param requestDTO the request DTO * @throws IdRepoAppException the id repo app exception @@ -769,8 +768,7 @@ public String getRidByIndividualId(String individualId, IdType idType) throws Id /** * This function is used to get the maximum allowed update count of an attribute * for the given individual id - * - * @param individualId The UIN of the individual + * * @param idType The type of the ID. For example, UIN, RID, VID, etc. * @param attributeList List of attributes for which the update count is to be * retrieved. From 642a56d520bee6f4978fd3f1c2f8700818f163b1 Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Fri, 1 Dec 2023 14:32:50 +0530 Subject: [PATCH 03/11] MOSIP-30420 Added validation in update identity API. (#844) * MOSIP-30420 Added validation in update identity API. Signed-off-by: kameshsr Signed-off-by: Loganathan Sekar * -sAdded null check Signed-off-by: kameshsr Signed-off-by: Loganathan Sekar * Combined 2 if condition Signed-off-by: kameshsr Signed-off-by: Loganathan Sekar * Update IdRepoServiceImpl.java Signed-off-by: Loganathan Sekar --------- Signed-off-by: kameshsr Signed-off-by: Loganathan Sekar Co-authored-by: Loganathan Sekar <42532387+LoganathanSekar7627@users.noreply.github.com> --- .../core/constant/IdRepoErrorConstants.java | 3 ++ .../service/impl/IdRepoServiceImpl.java | 30 ++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/IdRepoErrorConstants.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/IdRepoErrorConstants.java index 8b27791ad..9260adfc3 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/IdRepoErrorConstants.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/IdRepoErrorConstants.java @@ -51,6 +51,9 @@ public enum IdRepoErrorConstants { /** The record exists. */ RECORD_EXISTS("IDR-IDC-012", "Record already exists in DB"), + /** The update count limit for attributes exceeded. */ + UPDATE_COUNT_LIMIT_EXCEEDED("IDR-IDC-013", "Update count limit for the attributes exceeded:- %s"), + // Identity Service /** The identity mismatch. */ diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index 4023c4598..4c745f54b 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -91,6 +91,7 @@ import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UPDATE_COUNT_LIMIT_EXCEEDED; /** * The Class IdRepoServiceImpl - Service implementation for Identity service. @@ -116,6 +117,7 @@ public class IdRepoServiceImpl implements IdRepoService { /** The Constant ADD_IDENTITY. */ private static final String ADD_IDENTITY = "addIdentity"; + private static final String COMMA = ","; /** The mosip logger. */ Logger mosipLogger = IdRepoLogger.getLogger(IdRepoServiceImpl.class); @@ -510,14 +512,26 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum .encodeToURLSafeBase64(mapper.writeValueAsString(updateCountTrackerMap).getBytes()).getBytes())); } - private void updateCount(Map updateCountTrackerMap, Set attributeSet) { - for(String attribute: attributeSet) { - if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { - updateCountTrackerMap.compute(attribute, - (k, v) -> (Objects.nonNull(v) ? v + 1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) - ? (Objects.nonNull(v) ? v + 1 : 1) - : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); - } + private void updateCount(Map updateCountTrackerMap, Set attributeSet) throws IdRepoAppException { + List attributesHavingLimitExceeded = new ArrayList<>(); + attributeSet.forEach( attribute -> { + if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { + if (updateCountTrackerMap.get(attribute)!=null && + (IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(attribute) - + updateCountTrackerMap.get(attribute)) <= 0) { + attributesHavingLimitExceeded.add(attribute); + } + updateCountTrackerMap.compute(attribute, + (k, v) -> (Objects.nonNull(v) ? v + 1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) + ? (Objects.nonNull(v) ? v + 1 : 1) + : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); + } + } + ); + if(!attributesHavingLimitExceeded.isEmpty()){ + throw new IdRepoAppException(UPDATE_COUNT_LIMIT_EXCEEDED.getErrorCode(), + String.format(UPDATE_COUNT_LIMIT_EXCEEDED.getErrorMessage(), + String.join(COMMA, attributesHavingLimitExceeded))); } } From 8b7c4036cc34d3db65b79bb5ba8d01f46da881d3 Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:07:44 +0530 Subject: [PATCH 04/11] MOSIP-30420 Added debug log to debug update count issue (#845) Signed-off-by: kameshsr --- .../service/impl/IdRepoServiceImpl.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index 4c745f54b..ff40dcbe2 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -513,26 +513,36 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum } private void updateCount(Map updateCountTrackerMap, Set attributeSet) throws IdRepoAppException { + mosipLogger.debug("Entering updateCount"); List attributesHavingLimitExceeded = new ArrayList<>(); attributeSet.forEach( attribute -> { + mosipLogger.debug("Processing attribute: {}", attribute); if (IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().containsKey(attribute)) { - if (updateCountTrackerMap.get(attribute)!=null && - (IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(attribute) - - updateCountTrackerMap.get(attribute)) <= 0) { + Integer currentUpdateCount = updateCountTrackerMap.get(attribute); + mosipLogger.debug("Current Update Count for {}: {}", attribute, currentUpdateCount); + if (currentUpdateCount != null) { + int maxUpdateCountLimit = IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(attribute); + mosipLogger.debug("Max Update Count Limit for {}: {}", attribute, maxUpdateCountLimit); + if (maxUpdateCountLimit - currentUpdateCount <= 0) { attributesHavingLimitExceeded.add(attribute); + mosipLogger.debug("Limit exceeded for {}: {}", attribute, currentUpdateCount); } + } updateCountTrackerMap.compute(attribute, (k, v) -> (Objects.nonNull(v) ? v + 1 : 1) < IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k) ? (Objects.nonNull(v) ? v + 1 : 1) : IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(k)); + mosipLogger.debug("Updated count for {}: {}", attribute, updateCountTrackerMap.get(attribute)); } - } + } ); - if(!attributesHavingLimitExceeded.isEmpty()){ + if (!attributesHavingLimitExceeded.isEmpty()) { + String exceededAttributes = String.join(COMMA, attributesHavingLimitExceeded); + mosipLogger.debug("Limit exceeded for attributes: {}", exceededAttributes); throw new IdRepoAppException(UPDATE_COUNT_LIMIT_EXCEEDED.getErrorCode(), - String.format(UPDATE_COUNT_LIMIT_EXCEEDED.getErrorMessage(), - String.join(COMMA, attributesHavingLimitExceeded))); + String.format(UPDATE_COUNT_LIMIT_EXCEEDED.getErrorMessage(), exceededAttributes)); } + mosipLogger.debug("Exiting updateCount"); } private Entry> getUpdateCountTracker(String uinHash, DocumentContext dbData) From b44aaced5367668b1dd5e33c8c9d036c1f47a4e0 Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Tue, 5 Dec 2023 12:54:38 +0530 Subject: [PATCH 05/11] MOSIP-30419 Removed update count for update draft (#846) * MOSIP-30419 Removed update count for update draft Signed-off-by: kameshsr * MOSIP-30419 Refactored code Signed-off-by: kameshsr --------- Signed-off-by: kameshsr --- .../identity/service/impl/IdRepoDraftServiceImpl.java | 2 +- .../identity/service/impl/IdRepoServiceImpl.java | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoDraftServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoDraftServiceImpl.java index fb591492d..b8ea0faca 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoDraftServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoDraftServiceImpl.java @@ -254,7 +254,7 @@ private void updateDemographicData(IdRequestDTO request, UinDraft draftToUpdate) JSONCompareMode.LENIENT); if (comparisonResult.failed()) { - super.updateJsonObject(draftToUpdate.getUinHash(), inputData, dbData, comparisonResult); + super.updateJsonObject(draftToUpdate.getUinHash(), inputData, dbData, comparisonResult, false); } draftToUpdate.setUinData(convertToBytes(convertToObject(dbData.jsonString().getBytes(), Map.class))); draftToUpdate.setUinDataHash(securityManager.hash(draftToUpdate.getUinData())); diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index ff40dcbe2..c7effbe60 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -418,7 +418,7 @@ public Uin updateIdentity(IdRequestDTO request, String uin) throws IdRepoAppExce dbData.jsonString(), JSONCompareMode.LENIENT); if (comparisonResult.failed()) { - updateJsonObject(uinHash, inputData, dbData, comparisonResult); + updateJsonObject(uinHash, inputData, dbData, comparisonResult, true); } uinObject.setUinData(convertToBytes(convertToObject(dbData.jsonString().getBytes(), Map.class))); uinObject.setUinDataHash(securityManager.hash(uinObject.getUinData())); @@ -484,7 +484,7 @@ protected void updateVerifiedAttributes(RequestDTO requestDTO, DocumentContext i * @throws IdRepoAppException the id repo app exception */ protected void updateJsonObject(String uinHash, DocumentContext inputData, DocumentContext dbData, - JSONCompareResult comparisonResult) throws JSONException, IOException, IdRepoAppException { + JSONCompareResult comparisonResult, boolean canPersistUpdateCount) throws JSONException, IOException, IdRepoAppException { Entry> updateCountTracker = getUpdateCountTracker(uinHash, dbData); Map updateCountTrackerMap = updateCountTracker.getValue(); Set attribute = new HashSet<>(); @@ -502,11 +502,13 @@ protected void updateJsonObject(String uinHash, DocumentContext inputData, Docum if (!comparisonResult.getMessage().isEmpty()) { updateMissingValues(inputData, dbData, comparisonResult, attribute); } - updateCount(updateCountTrackerMap, attribute); + if(canPersistUpdateCount) { + updateCount(updateCountTrackerMap, attribute); + } comparisonResult = JSONCompare.compareJSON(inputData.jsonString(), dbData.jsonString(), JSONCompareMode.LENIENT); if (comparisonResult.failed()) { // Code should never reach here - updateJsonObject(uinHash, inputData, dbData, comparisonResult); + updateJsonObject(uinHash, inputData, dbData, comparisonResult, true); } identityUpdateTracker.save(new IdentityUpdateTracker(updateCountTracker.getKey(), CryptoUtil .encodeToURLSafeBase64(mapper.writeValueAsString(updateCountTrackerMap).getBytes()).getBytes())); From f820952d9fa00a3fcb367669073342537baf4412 Mon Sep 17 00:00:00 2001 From: kameshsr <47484458+kameshsr@users.noreply.github.com> Date: Wed, 6 Dec 2023 12:13:52 +0530 Subject: [PATCH 06/11] MOSIP-30592 Fixed update count issue (#847) * MOSIP-30592 Fixed update count issue Signed-off-by: kameshsr * MOSIP-30592 Added missing attributes from policy for update count Signed-off-by: kameshsr --------- Signed-off-by: kameshsr --- .../service/impl/IdRepoServiceImpl.java | 27 +++++++++++++++---- .../test/service/impl/IdRepoServiceTest.java | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index c7effbe60..3d9dc460b 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -812,17 +812,15 @@ public Map getRemainingUpdateCountByIndividualId(String uinHash CryptoUtil.decodeURLSafeBase64(new String(trackRecord.getIdentityUpdateCount())), new TypeReference>() { }); - return updateCountMap.entrySet().stream() + return addMissingAttributes(updateCountMap.entrySet().stream() .filter(entry -> attributeList.isEmpty() ? true : attributeList.contains(entry.getKey())) .map(entry -> Map.entry(entry.getKey(), Math.max(0, IdentityUpdateTrackerPolicyProvider.getMaxUpdateCountLimit(entry.getKey()) - entry.getValue()))) - .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + .collect(Collectors.toMap(Entry::getKey, Entry::getValue))); } else { - mosipLogger.error(IdRepoSecurityManager.getUser(), ID_REPO_SERVICE_IMPL, - "getMaxAllowedUpdateCountForIndividualId", "NO_RECORD_FOUND"); - throw new IdRepoAppException(NO_RECORD_FOUND); + return getRemainingUpdateCountFromConfig(attributeList); } } catch (IOException e) { mosipLogger.error(IdRepoSecurityManager.getUser(), ID_REPO_SERVICE_IMPL, @@ -831,6 +829,25 @@ public Map getRemainingUpdateCountByIndividualId(String uinHash } } + private Map addMissingAttributes(Map updateCountTracker) { + IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap().entrySet().stream() + .filter(entry -> !updateCountTracker.containsKey(entry.getKey())) + .forEach(entry -> updateCountTracker.put(entry.getKey(), entry.getValue())); + return updateCountTracker; + } + + + private Map getRemainingUpdateCountFromConfig(List attributeList) { + if(attributeList == null || attributeList.isEmpty()){ + return IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap(); + } else { + Map updateCountMapFromPolicy = IdentityUpdateTrackerPolicyProvider.getUpdateCountLimitMap(); + return attributeList.stream() + .filter(updateCountMapFromPolicy::containsKey) + .collect(Collectors.toMap(attribute -> attribute, updateCountMapFromPolicy::get)); + } + } + private void issueCredential(String enryptedUin, String uinHash, String uinStatus, LocalDateTime expiryTimestamp) { List credStatusList = credRequestRepo.findByIndividualIdHash(uinHash); if (!credStatusList.isEmpty() && uinStatus.contentEquals(activeStatus)) { diff --git a/id-repository/id-repository-identity-service/src/test/java/io/mosip/idrepository/identity/test/service/impl/IdRepoServiceTest.java b/id-repository/id-repository-identity-service/src/test/java/io/mosip/idrepository/identity/test/service/impl/IdRepoServiceTest.java index 46e134eef..7e09d779e 100644 --- a/id-repository/id-repository-identity-service/src/test/java/io/mosip/idrepository/identity/test/service/impl/IdRepoServiceTest.java +++ b/id-repository/id-repository-identity-service/src/test/java/io/mosip/idrepository/identity/test/service/impl/IdRepoServiceTest.java @@ -2235,7 +2235,7 @@ public void testGetRemainingUpdateCountByIndividualIdwithUINIdType_valid() throw assertEquals(Map.of("fullName", 0), response); } - @Test(expected = IdRepoAppException.class) + @Test public void testGetRemainingUpdateCountByIndividualIdwithUINIdType_UINNotExist() throws IdRepoAppException { IdRepoSecurityManager securityManagerMock = mock(IdRepoSecurityManager.class); ReflectionTestUtils.setField(proxyService, "securityManager", securityManagerMock); From 744295fd6d6704fe02657d1188a83c3efd2b7592 Mon Sep 17 00:00:00 2001 From: Neha Farheen Date: Tue, 14 Nov 2023 19:49:11 +0530 Subject: [PATCH 07/11] ES-422 changes done in id-repo add and update API Signed-off-by: Neha Farheen --- .../core/builder/RestRequestBuilder.java | 13 ++- .../core/constant/RestServicesConstants.java | 4 +- .../core/dto/CredentialIssueRequestDto.java | 1 + .../manager/CredentialServiceManager.java | 63 +++++++++--- .../core/manager/CredentialStatusManager.java | 4 +- .../manager/CredentialServiceManagerTest.java | 3 +- .../service/impl/IdRepoServiceImpl.java | 97 +++++++++++-------- 7 files changed, 120 insertions(+), 65 deletions(-) diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java index 015967ede..890383a59 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java @@ -91,14 +91,20 @@ private void init() { * @return the rest request DTO * @throws IdRepoDataValidationException the ID data validation exception */ + public RestRequestDTO buildRequest(RestServicesConstants restService, Object requestBody, Class returnType) throws IdRepoDataValidationException { + return buildRequest(restService,Map.of(),requestBody,returnType); + + } + + public RestRequestDTO buildRequest(RestServicesConstants restService, Map pathVariables, + Object requestBody, Class returnType) throws IdRepoDataValidationException { RestRequestDTO request = new RestRequestDTO(); MultiValueMap paramMap = new LinkedMultiValueMap<>(); - Map pathVariables = new HashMap<>(); - + // Map pathVariables = new HashMap<>(); String serviceName = restService.getServiceName(); - +System.out.println(serviceName); String uri = getProperty(serviceName, REST_URI); String httpMethod = getProperty(serviceName, REST_HTTP_METHOD); String timeout = getProperty(serviceName, REST_TIMEOUT); @@ -149,6 +155,7 @@ public RestRequestDTO buildRequest(RestServicesConstants restService, Object req */ private HttpHeaders constructHttpHeaders(String serviceName) throws IdRepoDataValidationException { try { + System.out.println("service name httpheaders....."+ serviceName ); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.valueOf(getProperty(serviceName, REST_HEADERS_MEDIA_TYPE))); return headers; diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java index 8cb20f4f2..3c36de3d5 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java @@ -39,7 +39,9 @@ public enum RestServicesConstants { RETRIEVE_UIN_BY_VID("mosip.idrepo.retrieve-uin-by-vid"), - BIO_EXTRACTOR_SERVICE("mosip.idrepo.bio-extractor-service"); + BIO_EXTRACTOR_SERVICE("mosip.idrepo.bio-extractor-service"), + + CREDENTIAL_REQUEST_SERVICE_V2("mosip.idrepo.credential.request.v2"); /** The service name. */ private final String serviceName; diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java index 33651b9eb..aa459fbee 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java @@ -20,5 +20,6 @@ public class CredentialIssueRequestDto { private String encryptionKey; private List sharableAttributes; private Map additionalData; + private String requestId; } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java index 9d47f03d2..d28218b35 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java @@ -61,6 +61,8 @@ */ public class CredentialServiceManager { + private static final String RID = "rid"; + private static final String SEND_REQUEST_TO_CRED_SERVICE = "sendRequestToCredService"; private static final String GET_PARTNER_IDS = "getPartnerIds"; @@ -114,7 +116,8 @@ public class CredentialServiceManager { @Value("$mosip.idrepo.vid.active-status}") private String vidActiveStatus; - + + /** The token ID generator. */ @Autowired private TokenIDGenerator tokenIDGenerator; @@ -147,9 +150,9 @@ public void init() { @Async public void triggerEventNotifications(String uin, LocalDateTime expiryTimestamp, String status, boolean isUpdate, - String txnId, IntFunction saltRetreivalFunction) { + String txnId, IntFunction saltRetreivalFunction, String requestId) { this.notifyUinCredential(uin, expiryTimestamp, status, isUpdate, txnId, saltRetreivalFunction, null, null, - partnerServiceManager.getOLVPartnerIds()); + partnerServiceManager.getOLVPartnerIds(),requestId); } /** @@ -163,11 +166,12 @@ public void triggerEventNotifications(String uin, LocalDateTime expiryTimestamp, * @param saltRetreivalFunction the salt retreival function * @param credentialResponseConsumer the credential response consumer * @param idaEventModelConsumer + * @param requestId */ public void notifyUinCredential(String uin, LocalDateTime expiryTimestamp, String status, boolean isUpdate, String txnId, IntFunction saltRetreivalFunction, BiConsumer> credentialRequestResponseConsumer, - Consumer idaEventModelConsumer, List partnerIds) { + Consumer idaEventModelConsumer, List partnerIds, String requestId) { try { List vidInfoDtos = null; if (isUpdate) { @@ -190,7 +194,7 @@ public void notifyUinCredential(String uin, LocalDateTime expiryTimestamp, Strin // For create uin, or update uin with null expiry (active status), send event to // credential service. sendUinEventsToCredService(uin, expiryTimestamp, isUpdate, vidInfoDtos, partnerIds, - saltRetreivalFunction, credentialRequestResponseConsumer); + saltRetreivalFunction, credentialRequestResponseConsumer,requestId); } } catch (Exception e) { @@ -328,14 +332,24 @@ private Stream createIdaEventModel(EventType eventType, LocalDateTim * @param saltRetreivalFunction the salt retreival function * @param credentialResponseConsumer the credential response consumer */ + public void sendUinEventsToCredService(String uin, LocalDateTime expiryTimestamp, boolean isUpdate, + List vidInfoDtos, List partnerIds, IntFunction saltRetreivalFunction, + BiConsumer> credentialRequestResponseConsumer) { + + sendUinEventsToCredService( uin, expiryTimestamp, isUpdate, + vidInfoDtos, partnerIds, saltRetreivalFunction, + credentialRequestResponseConsumer,null); + + } + public void sendUinEventsToCredService(String uin, LocalDateTime expiryTimestamp, boolean isUpdate, List vidInfoDtos, List partnerIds, IntFunction saltRetreivalFunction, - BiConsumer> credentialRequestResponseConsumer) { + BiConsumer> credentialRequestResponseConsumer,String requestId) { List eventRequestsList = new ArrayList<>(); eventRequestsList.addAll(partnerIds.stream().map(partnerId -> { String token = tokenIDGenerator.generateTokenID(uin, partnerId); return createCredReqDto(uin, partnerId, expiryTimestamp, null, token, - securityManager.getIdHashAndAttributesWithSaltModuloByPlainIdHash(uin, saltRetreivalFunction)); + securityManager.getIdHashAndAttributesWithSaltModuloByPlainIdHash(uin, saltRetreivalFunction),requestId); }).collect(Collectors.toList())); if (vidInfoDtos != null) { @@ -412,11 +426,18 @@ public void sendRequestToCredService(List eventReques private void sendRequestToCredService(String partnerId, CredentialIssueRequestWrapperDto requestWrapper, BiConsumer> credentialRequestResponseConsumer) { try { + Map response = Map.of(); - response = restHelper.requestSync( - restBuilder.buildRequest(RestServicesConstants.CREDENTIAL_REQUEST_SERVICE, requestWrapper, Map.class)); - mosipLogger.debug(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), SEND_REQUEST_TO_CRED_SERVICE, - "Response of Credential Request: " + mapper.writeValueAsString(response)); + RestServicesConstants restServicesConstants = requestWrapper.getRequest().getRequestId() != null && !requestWrapper.getRequest().getRequestId().isEmpty() + ? RestServicesConstants.CREDENTIAL_REQUEST_SERVICE_V2 + : RestServicesConstants.CREDENTIAL_REQUEST_SERVICE; + Map pathParam = requestWrapper.getRequest().getRequestId() != null && !requestWrapper.getRequest().getRequestId().isEmpty() ? Map.of(RID, requestWrapper.getRequest().getRequestId()) + : Map.of(); + response = restHelper + .requestSync(restBuilder.buildRequest(restServicesConstants, pathParam, requestWrapper, Map.class)); + mosipLogger.info(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), + SEND_REQUEST_TO_CRED_SERVICE, + "Response of Credential Request: " + mapper.writeValueAsString(response)); if (credentialRequestResponseConsumer != null) { credentialRequestResponseConsumer.accept(requestWrapper, response); @@ -443,16 +464,25 @@ private void sendRequestToCredService(String partnerId, CredentialIssueRequestWr * @param idHashAttributes the id hash attributes * @return the credential issue request dto */ + public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, LocalDateTime expiryTimestamp, - Integer transactionLimit, String token, Map idHashAttributes) { + Integer transactionLimit, String token, Map idHashAttributes + ) { + return createCredReqDto(id,partnerId,expiryTimestamp,transactionLimit,token,idHashAttributes,null); + } + public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, LocalDateTime expiryTimestamp, + Integer transactionLimit, String token, Map idHashAttributes,String requetId + ) { Map data = new HashMap<>(); data.putAll(idHashAttributes); - data.put(IdRepoConstants.EXPIRY_TIMESTAMP, Optional.ofNullable(expiryTimestamp).map(DateUtils::formatToISOString).orElse(null)); + data.put(IdRepoConstants.EXPIRY_TIMESTAMP, + Optional.ofNullable(expiryTimestamp).map(DateUtils::formatToISOString).orElse(null)); data.put(IdRepoConstants.TRANSACTION_LIMIT, transactionLimit); data.put(IdRepoConstants.TOKEN, token); CredentialIssueRequestDto credentialIssueRequestDto = new CredentialIssueRequestDto(); credentialIssueRequestDto.setId(id); + credentialIssueRequestDto.setRequestId(requetId); credentialIssueRequestDto.setCredentialType(credentialType); credentialIssueRequestDto.setIssuer(partnerId); credentialIssueRequestDto.setRecepiant(credentialRecepiant); @@ -462,7 +492,10 @@ public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, L } public void sendEventsToCredService(List requestEntities, - List partnerIds, BiConsumer> credentialRequestResponseConsumer, Predicate additionalFilterCondition, IntFunction saltRetreivalFunction) { + List partnerIds, + BiConsumer> credentialRequestResponseConsumer, + Predicate additionalFilterCondition, + IntFunction saltRetreivalFunction, String requestId) { if (requestEntities != null) { Predicate isExpiredCondition = this::isExpired; List requests = requestEntities @@ -476,7 +509,7 @@ public void sendEventsToCredService(List requ .filter(skipExistingCredentialsForPartnersCondition.negate()) .map(partnerId -> createCredReqDto(entity.getIndividualId(), partnerId, entity.getIdExpiryTimestamp(), entity.getIdTransactionLimit(), entity.getTokenId(), - securityManager.getIdHashAndAttributesWithSaltModuloByPlainIdHash(entity.getIndividualId(), saltRetreivalFunction))) + securityManager.getIdHashAndAttributesWithSaltModuloByPlainIdHash(entity.getIndividualId(), saltRetreivalFunction),requestId)) .filter(additionalPredicate); }).collect(Collectors.toList()); diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialStatusManager.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialStatusManager.java index f9a2c19d0..34a6d9326 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialStatusManager.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialStatusManager.java @@ -94,7 +94,7 @@ private void handleDeletedRequests() { credManager.notifyUinCredential(idvId, credentialRequestStatus.getIdExpiryTimestamp(), "BLOCKED", true, null, uinHashSaltRepo::retrieveSaltById, this::credentialRequestResponseConsumer, - this::idaEventConsumer, List.of(credentialRequestStatus.getPartnerId())); + this::idaEventConsumer, List.of(credentialRequestStatus.getPartnerId()),credentialRequestStatus.getRequestId()); } } catch (Exception e) { mosipLogger.error(IdRepoSecurityManager.getUser(), this.getClass().getSimpleName(), "handleDeletedRequests", ExceptionUtils.getStackTrace(e)); @@ -125,7 +125,7 @@ public void handleNewOrUpdatedRequests() { credManager.notifyUinCredential(idvId, credentialRequestStatus.getIdExpiryTimestamp(), activeStatus, Objects.nonNull(credentialRequestStatus.getUpdatedBy()), null, uinHashSaltRepo::retrieveSaltById, this::credentialRequestResponseConsumer, - this::idaEventConsumer, List.of(credentialRequestStatus.getPartnerId())); + this::idaEventConsumer, List.of(credentialRequestStatus.getPartnerId()),credentialRequestStatus.getRequestId()); deleteDummyPartner(credentialRequestStatus); } } catch (Exception e) { diff --git a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java index fb75e2eb8..7dd7ccc90 100644 --- a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java +++ b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java @@ -111,8 +111,9 @@ public void notifyUinCredentialForStatusUpdateTest() throws IdRepoDataValidation Consumer idaEventModelConsumer = null; List partnerIds = new ArrayList(); partnerIds.add(txnId); + String requestId = "123465"; credentialServiceManager.notifyUinCredential(uin, expiryTimestamp, status, isUpdate, txnId, - saltRetreivalFunction, credentialRequestResponseConsumer, idaEventModelConsumer, partnerIds); + saltRetreivalFunction, credentialRequestResponseConsumer, idaEventModelConsumer, partnerIds,requestId); } } diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index 3d9dc460b..e7315dc39 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -1,5 +1,47 @@ package io.mosip.idrepository.identity.service.impl; +import static io.mosip.idrepository.core.constant.IdRepoConstants.CBEFF_FORMAT; +import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_FORMAT_ATTRIBUTE; +import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_NAME_ATTRIBUTE; +import static io.mosip.idrepository.core.constant.IdRepoConstants.SPLITTER; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.ID_OBJECT_PROCESSING_FAILED; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.skyscreamer.jsonassert.FieldComparisonFailure; +import org.skyscreamer.jsonassert.JSONCompare; +import org.skyscreamer.jsonassert.JSONCompareMode; +import org.skyscreamer.jsonassert.JSONCompareResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -13,6 +55,7 @@ import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; + import io.mosip.idrepository.core.constant.CredentialRequestStatusLifecycle; import io.mosip.idrepository.core.constant.IdType; import io.mosip.idrepository.core.dto.DocumentsDTO; @@ -51,47 +94,6 @@ import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.kernel.core.util.DateUtils; import io.mosip.kernel.core.util.UUIDUtils; -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.skyscreamer.jsonassert.FieldComparisonFailure; -import org.skyscreamer.jsonassert.JSONCompare; -import org.skyscreamer.jsonassert.JSONCompareMode; -import org.skyscreamer.jsonassert.JSONCompareResult; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.io.IOException; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static io.mosip.idrepository.core.constant.IdRepoConstants.CBEFF_FORMAT; -import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_FORMAT_ATTRIBUTE; -import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_NAME_ATTRIBUTE; -import static io.mosip.idrepository.core.constant.IdRepoConstants.SPLITTER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.ID_OBJECT_PROCESSING_FAILED; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UPDATE_COUNT_LIMIT_EXCEEDED; /** * The Class IdRepoServiceImpl - Service implementation for Identity service. @@ -195,6 +197,10 @@ public class IdRepoServiceImpl implements IdRepoService { @Autowired private IdentityUpdateTrackerRepo identityUpdateTracker; + + @Value("${mosip.idrepo.credential.request.enable-convention-based-id:false}") + private boolean isCredentialrequestv2; + /** * Adds the identity to DB. * @@ -242,7 +248,7 @@ public Uin addIdentity(IdRequestDTO request, String uin) throws IdRepoAppExcepti new UinHistory(uinRefId, DateUtils.getUTCCurrentDateTime(), uinEntity.getUin(), uinEntity.getUinHash(), uinEntity.getUinData(), uinEntity.getUinDataHash(), uinEntity.getRegId(), activeStatus, IdRepoSecurityManager.getUser(), DateUtils.getUTCCurrentDateTime(), null, null, false, null)); - issueCredential(uinEntity.getUin(), uinHashWithSalt, activeStatus, null); + issueCredential(uinEntity.getUin(), uinHashWithSalt, activeStatus, null,uinEntity.getRegId()); anonymousProfileHelper.buildAndsaveProfile(false); return uinEntity; } @@ -445,7 +451,7 @@ public Uin updateIdentity(IdRequestDTO request, String uin) throws IdRepoAppExce DateUtils.getUTCCurrentDateTime(), IdRepoSecurityManager.getUser(), DateUtils.getUTCCurrentDateTime(), false, null)); issueCredential(uinObject.getUin(), uinHashWithSalt, uinObject.getStatusCode(), - DateUtils.getUTCCurrentDateTime()); + DateUtils.getUTCCurrentDateTime(),uinObject.getRegId()); anonymousProfileHelper.buildAndsaveProfile(false); return uinObject; } catch (JSONException | InvalidJsonException | IOException e) { @@ -565,6 +571,7 @@ private Entry> getUpdateCountTracker(String uinHash * * @param dbData the db data * @param comparisonResult the comparison result + * @param isUpdateAllowedAsPerPolicy * @throws IdRepoAppException the id repo app exception */ @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -679,6 +686,7 @@ private void updateMissingValues(DocumentContext inputData, DocumentContext dbDa /** * Update documents. * + * @param uinHash the uin hash * @param uinObject the uin object * @param requestDTO the request DTO * @throws IdRepoAppException the id repo app exception @@ -874,6 +882,9 @@ private void issueCredential(String enryptedUin, String uinHash, String uinStatu credStatus.setIdExpiryTimestamp(uinStatus.contentEquals(activeStatus) ? null : expiryTimestamp); credStatus.setCreatedBy(IdRepoSecurityManager.getUser()); credStatus.setCrDTimes(DateUtils.getUTCCurrentDateTime()); + if(isCredentialrequestv2 && (requestId != null)) { + credStatus.setRequestId(requestId); + } credRequestRepo.save(credStatus); } } From 3a7f7d0ac119d2a0c4456d837268a9a5652a5d3d Mon Sep 17 00:00:00 2001 From: Neha Farheen Date: Tue, 14 Nov 2023 19:55:08 +0530 Subject: [PATCH 08/11] ES-422 Remove sysout Signed-off-by: Neha Farheen --- .../core/builder/RestRequestBuilder.java | 2 -- .../core/manager/CredentialServiceManager.java | 14 ++++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java index 890383a59..3ef176a78 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java @@ -104,7 +104,6 @@ public RestRequestDTO buildRequest(RestServicesConstants restService, Map paramMap = new LinkedMultiValueMap<>(); // Map pathVariables = new HashMap<>(); String serviceName = restService.getServiceName(); -System.out.println(serviceName); String uri = getProperty(serviceName, REST_URI); String httpMethod = getProperty(serviceName, REST_HTTP_METHOD); String timeout = getProperty(serviceName, REST_TIMEOUT); @@ -155,7 +154,6 @@ public RestRequestDTO buildRequest(RestServicesConstants restService, Map response = Map.of(); - RestServicesConstants restServicesConstants = requestWrapper.getRequest().getRequestId() != null && !requestWrapper.getRequest().getRequestId().isEmpty() - ? RestServicesConstants.CREDENTIAL_REQUEST_SERVICE_V2 - : RestServicesConstants.CREDENTIAL_REQUEST_SERVICE; - Map pathParam = requestWrapper.getRequest().getRequestId() != null && !requestWrapper.getRequest().getRequestId().isEmpty() ? Map.of(RID, requestWrapper.getRequest().getRequestId()) - : Map.of(); + RestServicesConstants restServicesConstants = requestWrapper.getRequest().getRequestId() != null + && !requestWrapper.getRequest().getRequestId().isEmpty() + ? RestServicesConstants.CREDENTIAL_REQUEST_SERVICE_V2 + : RestServicesConstants.CREDENTIAL_REQUEST_SERVICE; + Map pathParam = requestWrapper.getRequest().getRequestId() != null + && !requestWrapper.getRequest().getRequestId().isEmpty() + ? Map.of(RID, requestWrapper.getRequest().getRequestId()) + : Map.of(); response = restHelper .requestSync(restBuilder.buildRequest(restServicesConstants, pathParam, requestWrapper, Map.class)); mosipLogger.info(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), From b2189a92958880407d5dc1ec235f86c48b08f888 Mon Sep 17 00:00:00 2001 From: Neha Farheen Date: Mon, 20 Nov 2023 11:01:28 +0530 Subject: [PATCH 09/11] Changes done according to review comment Signed-off-by: Neha Farheen --- .../idrepository/core/dto/CredentialIssueRequestDto.java | 4 ++-- .../idrepository/core/dto/CredentialRequestV2DTO.java | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java index aa459fbee..e069dd222 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java @@ -6,7 +6,7 @@ import lombok.Data; @Data -public class CredentialIssueRequestDto { +public class CredentialIssueRequestDto extends CredentialRequestV2DTO { @@ -20,6 +20,6 @@ public class CredentialIssueRequestDto { private String encryptionKey; private List sharableAttributes; private Map additionalData; - private String requestId; + } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java new file mode 100644 index 000000000..2c27e4e37 --- /dev/null +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java @@ -0,0 +1,8 @@ +package io.mosip.idrepository.core.dto; + +import lombok.Data; + +@Data +public class CredentialRequestV2DTO { + private String requestId; +} From df1a68d870258f58b9b9c716790eea42aab4ffa5 Mon Sep 17 00:00:00 2001 From: Neha Farheen Date: Thu, 23 Nov 2023 14:24:35 +0530 Subject: [PATCH 10/11] Changes done to type cast V2 dto Signed-off-by: Neha Farheen --- .../core/dto/CredentialIssueRequestDto.java | 2 +- .../dto/CredentialIssueRequestWrapperDto.java | 2 +- .../core/dto/CredentialRequestV2DTO.java | 5 ++++- .../core/manager/CredentialServiceManager.java | 15 ++++++++------- .../core/manager/CredentialStatusManagerTest.java | 7 ++++--- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java index e069dd222..7d7b194e1 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java @@ -6,7 +6,7 @@ import lombok.Data; @Data -public class CredentialIssueRequestDto extends CredentialRequestV2DTO { +public class CredentialIssueRequestDto { diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java index dda6c7111..ec42c3053 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java @@ -11,5 +11,5 @@ */ @Data @EqualsAndHashCode(callSuper = true) -public class CredentialIssueRequestWrapperDto extends RequestWrapper { +public class CredentialIssueRequestWrapperDto extends RequestWrapper { } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java index 2c27e4e37..8b70266e6 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java @@ -1,8 +1,11 @@ package io.mosip.idrepository.core.dto; import lombok.Data; +import lombok.EqualsAndHashCode; @Data -public class CredentialRequestV2DTO { +@EqualsAndHashCode(callSuper = true) +public class CredentialRequestV2DTO extends CredentialIssueRequestDto { + private String requestId; } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java index 21146dbde..716b47606 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java @@ -32,6 +32,7 @@ import io.mosip.idrepository.core.constant.RestServicesConstants; import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; import io.mosip.idrepository.core.dto.CredentialIssueRequestWrapperDto; +import io.mosip.idrepository.core.dto.CredentialRequestV2DTO; import io.mosip.idrepository.core.dto.CredentialStatusUpdateEvent; import io.mosip.idrepository.core.dto.RestRequestDTO; import io.mosip.idrepository.core.dto.VidInfoDTO; @@ -405,7 +406,7 @@ public void sendRequestToCredService(List eventReques BiConsumer> credentialRequestResponseConsumer) { eventRequestsList.forEach(reqDto -> { CredentialIssueRequestWrapperDto requestWrapper = new CredentialIssueRequestWrapperDto(); - requestWrapper.setRequest(reqDto); + requestWrapper.setRequest((CredentialRequestV2DTO) reqDto); requestWrapper.setRequesttime(DateUtils.getUTCCurrentDateTime()); String eventTypeDisplayName = isUpdate ? "Update ID" : "Create ID"; mosipLogger.info(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), NOTIFY, @@ -427,13 +428,13 @@ private void sendRequestToCredService(String partnerId, CredentialIssueRequestWr try { Map response = Map.of(); - RestServicesConstants restServicesConstants = requestWrapper.getRequest().getRequestId() != null - && !requestWrapper.getRequest().getRequestId().isEmpty() + RestServicesConstants restServicesConstants = ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId() != null + && !((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId().isEmpty() ? RestServicesConstants.CREDENTIAL_REQUEST_SERVICE_V2 : RestServicesConstants.CREDENTIAL_REQUEST_SERVICE; - Map pathParam = requestWrapper.getRequest().getRequestId() != null - && !requestWrapper.getRequest().getRequestId().isEmpty() - ? Map.of(RID, requestWrapper.getRequest().getRequestId()) + Map pathParam = ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId() != null + && !((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId().isEmpty() + ? Map.of(RID, ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId()) : Map.of(); response = restHelper .requestSync(restBuilder.buildRequest(restServicesConstants, pathParam, requestWrapper, Map.class)); @@ -482,7 +483,7 @@ public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, L data.put(IdRepoConstants.TRANSACTION_LIMIT, transactionLimit); data.put(IdRepoConstants.TOKEN, token); - CredentialIssueRequestDto credentialIssueRequestDto = new CredentialIssueRequestDto(); + CredentialRequestV2DTO credentialIssueRequestDto = new CredentialRequestV2DTO(); credentialIssueRequestDto.setId(id); credentialIssueRequestDto.setRequestId(requetId); credentialIssueRequestDto.setCredentialType(credentialType); diff --git a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java index 960e5d005..0593800b8 100644 --- a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java +++ b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java @@ -7,6 +7,7 @@ import java.util.*; import io.mosip.idrepository.core.dto.CredentialIssueResponse; +import io.mosip.idrepository.core.dto.CredentialRequestV2DTO; import io.mosip.idrepository.core.exception.IdRepoAppException; import org.junit.Before; import org.junit.Test; @@ -195,7 +196,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { request.setId("1"); request.setVersion("2.0"); request.setRequesttime(LocalDateTime.now()); - request.setRequest(req); + request.setRequest((CredentialRequestV2DTO) req); Map response = new HashMap(); response.put("response", "value1"); credentialStatusManager.credentialRequestResponseConsumer(request, response); @@ -211,7 +212,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { additionalData.put("transaction_limit", 3); additionalData.put("expiry_timestamp", LocalDateTime.now()); req.setAdditionalData(additionalData); - request.setRequest(req); + request.setRequest((CredentialRequestV2DTO) req); credentialStatusManagerSpy.credentialRequestResponseConsumer(request, response); CredentialRequestStatus credentialRequestStatus = new CredentialRequestStatus(); @@ -221,7 +222,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { additionalData.remove("transaction_limit", 3); req.setAdditionalData(additionalData); - request.setRequest(req); + request.setRequest((CredentialRequestV2DTO) req); credentialStatusManagerSpy.credentialRequestResponseConsumer(request, response); } From 450f9357478c93508700de06d9ecbfe92b3bab9e Mon Sep 17 00:00:00 2001 From: ase-101 Date: Thu, 7 Dec 2023 23:04:15 +0530 Subject: [PATCH 11/11] ES-422 Fixed review comments Signed-off-by: ase-101 --- .../CredentialRequestGeneratorController.java | 11 ++---- .../service/CredentialRequestService.java | 10 ++---- .../impl/CredentialRequestServiceImpl.java | 11 +++--- .../generator/validator/RequestValidator.java | 5 +-- .../CredentialRequestServiceImplTest.java | 14 +++----- .../core/builder/RestRequestBuilder.java | 1 - .../core/constant/RestServicesConstants.java | 2 +- .../core/dto/CredentialIssueRequest.java | 21 +++++++++++ .../core/dto/CredentialIssueRequestDto.java | 2 +- .../dto/CredentialIssueRequestWrapperDto.java | 2 +- .../core/dto/CredentialRequestV2DTO.java | 11 ------ .../manager/CredentialServiceManager.java | 35 ++++++++----------- .../manager/CredentialStatusManagerTest.java | 11 ++---- .../manager/CredentialServiceManagerTest.java | 2 +- .../service/impl/IdRepoServiceImpl.java | 25 ++++--------- 15 files changed, 68 insertions(+), 95 deletions(-) create mode 100644 id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequest.java delete mode 100644 id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java diff --git a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/controller/CredentialRequestGeneratorController.java b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/controller/CredentialRequestGeneratorController.java index 669aef67f..de7295a62 100644 --- a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/controller/CredentialRequestGeneratorController.java +++ b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/controller/CredentialRequestGeneratorController.java @@ -6,12 +6,7 @@ import io.mosip.credential.request.generator.init.SubscribeEvent; import io.mosip.credential.request.generator.service.CredentialRequestService; import io.mosip.credential.request.generator.validator.RequestValidator; -import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; -import io.mosip.idrepository.core.dto.CredentialIssueResponse; -import io.mosip.idrepository.core.dto.CredentialIssueResponseDto; -import io.mosip.idrepository.core.dto.CredentialIssueStatusResponse; -import io.mosip.idrepository.core.dto.CredentialRequestIdsDto; -import io.mosip.idrepository.core.dto.PageDto; +import io.mosip.idrepository.core.dto.*; import io.mosip.idrepository.core.exception.IdRepoAppException; import io.mosip.idrepository.core.logger.IdRepoLogger; import io.mosip.kernel.core.http.RequestWrapper; @@ -89,7 +84,7 @@ public class CredentialRequestGeneratorController { @ApiResponse(responseCode = "403", description = "Forbidden" ,content = @Content(schema = @Schema(hidden = true))), @ApiResponse(responseCode = "404", description = "Not Found" ,content = @Content(schema = @Schema(hidden = true)))}) public ResponseEntity credentialIssue( - @RequestBody RequestWrapper credentialIssueRequestDto) throws IdRepoAppException { + @RequestBody RequestWrapper credentialIssueRequestDto) throws IdRepoAppException { requestValidator.validateRequestGeneratorRequest(credentialIssueRequestDto); ResponseWrapper credentialIssueResponseWrapper = credentialRequestService @@ -114,7 +109,7 @@ public ResponseEntity credentialIssue( @ApiResponse(responseCode = "403", description = "Forbidden" ,content = @Content(schema = @Schema(hidden = true))), @ApiResponse(responseCode = "404", description = "Not Found" ,content = @Content(schema = @Schema(hidden = true)))}) public ResponseEntity credentialIssueByRid( - @RequestBody RequestWrapper credentialIssueRequestDto, @PathVariable("rid") String rid) { + @RequestBody RequestWrapper credentialIssueRequestDto, @PathVariable("rid") String rid) { ResponseWrapper credentialIssueResponseWrapper = credentialRequestService .createCredentialIssuanceByRid(credentialIssueRequestDto.getRequest(),rid); diff --git a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/CredentialRequestService.java b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/CredentialRequestService.java index 51c5aadf9..7517664cf 100644 --- a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/CredentialRequestService.java +++ b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/CredentialRequestService.java @@ -1,14 +1,10 @@ package io.mosip.credential.request.generator.service; +import io.mosip.idrepository.core.dto.*; import org.springframework.stereotype.Service; import io.mosip.credential.request.generator.dto.CredentialStatusEvent; import io.mosip.credential.request.generator.exception.CredentialRequestGeneratorException; -import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; -import io.mosip.idrepository.core.dto.CredentialIssueResponse; -import io.mosip.idrepository.core.dto.CredentialIssueStatusResponse; -import io.mosip.idrepository.core.dto.CredentialRequestIdsDto; -import io.mosip.idrepository.core.dto.PageDto; import io.mosip.kernel.core.http.ResponseWrapper; @@ -27,7 +23,7 @@ public interface CredentialRequestService { * @param credentialIssueRequestDto the credential issue request dto * @return the credential issue response */ - public ResponseWrapper createCredentialIssuance(CredentialIssueRequestDto credentialIssueRequestDto); + public ResponseWrapper createCredentialIssuance(CredentialIssueRequest credentialIssueRequestDto); /** * Cancel credential request. @@ -78,5 +74,5 @@ public ResponseWrapper> getRequestIds(String st */ public ResponseWrapper retriggerCredentialRequest(String requestId); - ResponseWrapper createCredentialIssuanceByRid(CredentialIssueRequestDto request, String rid); + ResponseWrapper createCredentialIssuanceByRid(CredentialIssueRequest request, String rid); } diff --git a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImpl.java b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImpl.java index 239db2a10..afdbebd18 100644 --- a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImpl.java +++ b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImpl.java @@ -11,6 +11,8 @@ import java.util.List; import java.util.Objects; import java.util.Optional; + +import io.mosip.idrepository.core.dto.*; import io.mosip.kernel.core.util.CryptoUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -36,11 +38,6 @@ import io.mosip.idrepository.core.constant.AuditEvents; import io.mosip.idrepository.core.constant.AuditModules; import io.mosip.idrepository.core.constant.IdType; -import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; -import io.mosip.idrepository.core.dto.CredentialIssueResponse; -import io.mosip.idrepository.core.dto.CredentialIssueStatusResponse; -import io.mosip.idrepository.core.dto.CredentialRequestIdsDto; -import io.mosip.idrepository.core.dto.PageDto; import io.mosip.idrepository.core.helper.AuditHelper; import io.mosip.idrepository.core.logger.IdRepoLogger; import io.mosip.idrepository.core.security.IdRepoSecurityManager; @@ -101,7 +98,7 @@ public class CredentialRequestServiceImpl implements CredentialRequestService { * CredentialIssueRequestDto) */ @Override - public ResponseWrapper createCredentialIssuance(CredentialIssueRequestDto credentialIssueRequestDto) { + public ResponseWrapper createCredentialIssuance(CredentialIssueRequest credentialIssueRequestDto) { LOGGER.debug(IdRepoSecurityManager.getUser(), CREDENTIAL_SERVICE, CREATE_CREDENTIAL, "started creating credential"); List errorList = new ArrayList<>(); @@ -159,7 +156,7 @@ public ResponseWrapper createCredentialIssuance(Credent } @Override - public ResponseWrapper createCredentialIssuanceByRid(CredentialIssueRequestDto credentialIssueRequestDto, String rid) { + public ResponseWrapper createCredentialIssuanceByRid(CredentialIssueRequest credentialIssueRequestDto, String rid) { LOGGER.debug(IdRepoSecurityManager.getUser(), CREDENTIAL_SERVICE, CREATE_CREDENTIAL, "started creating credential"); List errorList = new ArrayList<>(); diff --git a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/validator/RequestValidator.java b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/validator/RequestValidator.java index 5732e0ffb..9aaa62c06 100644 --- a/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/validator/RequestValidator.java +++ b/id-repository/credential-request-generator/src/main/java/io/mosip/credential/request/generator/validator/RequestValidator.java @@ -1,5 +1,6 @@ package io.mosip.credential.request.generator.validator; +import io.mosip.idrepository.core.dto.CredentialIssueRequest; import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; import io.mosip.idrepository.core.exception.IdRepoAppException; import io.mosip.kernel.core.http.RequestWrapper; @@ -19,7 +20,7 @@ public class RequestValidator { private static final String CREDENTIAL_TYPE = "credentialType"; private static final Object CREDENTIAL_ISSUE_REQUEST_DTO = "credentialIssueRequestDto"; - public void validateRequestGeneratorRequest(RequestWrapper requestWrapper) throws IdRepoAppException { + public void validateRequestGeneratorRequest(RequestWrapper requestWrapper) throws IdRepoAppException { validateAPIRequestToCheckNull(requestWrapper); validateDataToCheckNullOrEmpty(requestWrapper.getRequest().getCredentialType(), CREDENTIAL_TYPE); @@ -27,7 +28,7 @@ public void validateRequestGeneratorRequest(RequestWrapper requestWrapper) throws IdRepoAppException { + private void validateAPIRequestToCheckNull(RequestWrapper requestWrapper) throws IdRepoAppException { if (requestWrapper.getRequest() == null) { throw new IdRepoAppException(INVALID_INPUT_PARAMETER.getErrorCode(), String.format(INVALID_INPUT_PARAMETER.getErrorMessage(), CREDENTIAL_ISSUE_REQUEST_DTO)); diff --git a/id-repository/credential-request-generator/src/test/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImplTest.java b/id-repository/credential-request-generator/src/test/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImplTest.java index 5347c033f..cfd9663b2 100644 --- a/id-repository/credential-request-generator/src/test/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImplTest.java +++ b/id-repository/credential-request-generator/src/test/java/io/mosip/credential/request/generator/service/impl/CredentialRequestServiceImplTest.java @@ -13,6 +13,7 @@ import io.mosip.idrepository.core.constant.AuditEvents; import io.mosip.idrepository.core.constant.AuditModules; import io.mosip.idrepository.core.constant.IdType; +import io.mosip.idrepository.core.dto.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,11 +41,6 @@ import io.mosip.credential.request.generator.repositary.CredentialRepositary; import io.mosip.credential.request.generator.service.impl.CredentialRequestServiceImpl; import io.mosip.credential.request.generator.util.Utilities; -import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; -import io.mosip.idrepository.core.dto.CredentialIssueResponse; -import io.mosip.idrepository.core.dto.CredentialIssueStatusResponse; -import io.mosip.idrepository.core.dto.CredentialRequestIdsDto; -import io.mosip.idrepository.core.dto.PageDto; import io.mosip.idrepository.core.helper.AuditHelper; import io.mosip.idrepository.core.util.EnvUtil; import io.mosip.kernel.core.dataaccess.exception.DataAccessLayerException; @@ -87,7 +83,7 @@ public void setUp() { @Test public void testCreateCredentialIssuanceSuccess() throws JsonProcessingException { - CredentialIssueRequestDto credentialIssueRequestDto=new CredentialIssueRequestDto(); + CredentialIssueRequest credentialIssueRequestDto=new CredentialIssueRequest(); credentialIssueRequestDto.setCredentialType("MOSIP"); credentialIssueRequestDto.setId("123"); credentialIssueRequestDto.setEncrypt(true); @@ -98,7 +94,7 @@ public void testCreateCredentialIssuanceSuccess() throws JsonProcessingException @Test public void testCreateCredentialIssuanceByRidSuccess() throws JsonProcessingException { - CredentialIssueRequestDto credentialIssueRequestDto=new CredentialIssueRequestDto(); + CredentialIssueRequest credentialIssueRequestDto=new CredentialIssueRequest(); credentialIssueRequestDto.setCredentialType("MOSIP"); credentialIssueRequestDto.setId("123"); credentialIssueRequestDto.setEncrypt(true); @@ -110,7 +106,7 @@ public void testCreateCredentialIssuanceByRidSuccess() throws JsonProcessingExce @Test public void testDataAccessLayerExceptionForCreateCredentialByRid() throws JsonProcessingException { org.mockito.Mockito.doThrow(new DataAccessLayerException("", "", new Throwable())).when(credentialDao).save(Mockito.any()); - CredentialIssueRequestDto credentialIssueRequestDto=new CredentialIssueRequestDto(); + CredentialIssueRequest credentialIssueRequestDto=new CredentialIssueRequest(); credentialIssueRequestDto.setCredentialType("MOSIP"); credentialIssueRequestDto.setId("123"); credentialIssueRequestDto.setEncrypt(true); @@ -122,7 +118,7 @@ public void testDataAccessLayerExceptionForCreateCredentialByRid() throws JsonPr @Test public void testDataAccessLayerExceptionForCreateCredential() throws JsonProcessingException { org.mockito.Mockito.doThrow(new DataAccessLayerException("", "", new Throwable())).when(credentialDao).save(Mockito.any()); - CredentialIssueRequestDto credentialIssueRequestDto=new CredentialIssueRequestDto(); + CredentialIssueRequest credentialIssueRequestDto=new CredentialIssueRequest(); credentialIssueRequestDto.setCredentialType("MOSIP"); credentialIssueRequestDto.setId("123"); credentialIssueRequestDto.setEncrypt(true); diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java index 3ef176a78..2eec708a3 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/builder/RestRequestBuilder.java @@ -102,7 +102,6 @@ public RestRequestDTO buildRequest(RestServicesConstants restService, Map returnType) throws IdRepoDataValidationException { RestRequestDTO request = new RestRequestDTO(); MultiValueMap paramMap = new LinkedMultiValueMap<>(); - // Map pathVariables = new HashMap<>(); String serviceName = restService.getServiceName(); String uri = getProperty(serviceName, REST_URI); String httpMethod = getProperty(serviceName, REST_HTTP_METHOD); diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java index 3c36de3d5..c3955dec5 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/constant/RestServicesConstants.java @@ -41,7 +41,7 @@ public enum RestServicesConstants { BIO_EXTRACTOR_SERVICE("mosip.idrepo.bio-extractor-service"), - CREDENTIAL_REQUEST_SERVICE_V2("mosip.idrepo.credential.request.v2"); + CREDENTIAL_REQUEST_SERVICE_V2("mosip.idrepo.credential-request-v2"); /** The service name. */ private final String serviceName; diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequest.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequest.java new file mode 100644 index 000000000..80489db31 --- /dev/null +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequest.java @@ -0,0 +1,21 @@ +package io.mosip.idrepository.core.dto; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CredentialIssueRequest { + + private String id; + private String credentialType; + //partner id + private String issuer; + private String recepiant; + private String user; + private boolean encrypt; + private String encryptionKey; + private List sharableAttributes; + private Map additionalData; +} diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java index 7d7b194e1..929b73ee8 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestDto.java @@ -20,6 +20,6 @@ public class CredentialIssueRequestDto { private String encryptionKey; private List sharableAttributes; private Map additionalData; - + private String requestId; } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java index ec42c3053..dda6c7111 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialIssueRequestWrapperDto.java @@ -11,5 +11,5 @@ */ @Data @EqualsAndHashCode(callSuper = true) -public class CredentialIssueRequestWrapperDto extends RequestWrapper { +public class CredentialIssueRequestWrapperDto extends RequestWrapper { } diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java deleted file mode 100644 index 8b70266e6..000000000 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/dto/CredentialRequestV2DTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.mosip.idrepository.core.dto; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@EqualsAndHashCode(callSuper = true) -public class CredentialRequestV2DTO extends CredentialIssueRequestDto { - - private String requestId; -} diff --git a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java index 716b47606..6389e2011 100644 --- a/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java +++ b/id-repository/id-repository-core/src/main/java/io/mosip/idrepository/core/manager/CredentialServiceManager.java @@ -32,7 +32,6 @@ import io.mosip.idrepository.core.constant.RestServicesConstants; import io.mosip.idrepository.core.dto.CredentialIssueRequestDto; import io.mosip.idrepository.core.dto.CredentialIssueRequestWrapperDto; -import io.mosip.idrepository.core.dto.CredentialRequestV2DTO; import io.mosip.idrepository.core.dto.CredentialStatusUpdateEvent; import io.mosip.idrepository.core.dto.RestRequestDTO; import io.mosip.idrepository.core.dto.VidInfoDTO; @@ -164,7 +163,7 @@ public void triggerEventNotifications(String uin, LocalDateTime expiryTimestamp, * @param isUpdate the is update * @param txnId the txn id * @param saltRetreivalFunction the salt retreival function - * @param credentialResponseConsumer the credential response consumer + * @param credentialRequestResponseConsumer the credential response consumer * @param idaEventModelConsumer * @param requestId */ @@ -211,7 +210,7 @@ public void notifyUinCredential(String uin, LocalDateTime expiryTimestamp, Strin * @param vids the vids * @param isUpdated the is updated * @param saltRetreivalFunction the salt retreival function - * @param credentialResponseConsumer the credential response consumer + * @param credentialRequestResponseConsumer the credential response consumer * @param idaEventModelConsumer */ @Async @@ -307,7 +306,6 @@ private void sendVIDEventsToIDA(String status, List vids, List createIdaEventModel(EventType eventType, LocalDateTim * @param vidInfoDtos the vid info dtos * @param partnerIds the partner ids * @param saltRetreivalFunction the salt retreival function - * @param credentialResponseConsumer the credential response consumer + * @param credentialRequestResponseConsumer the credential response consumer */ public void sendUinEventsToCredService(String uin, LocalDateTime expiryTimestamp, boolean isUpdate, List vidInfoDtos, List partnerIds, IntFunction saltRetreivalFunction, @@ -376,7 +374,7 @@ public void sendUinEventsToCredService(String uin, LocalDateTime expiryTimestamp * @param isUpdate the is update * @param partnerIds the partner ids * @param saltRetreivalFunction the salt retreival function - * @param credentialResponseConsumer the credential response consumer + * @param credentialRequestResponseConsumer the credential response consumer */ public void sendVidEventsToCredService(String uin, String status, List vids, boolean isUpdate, List partnerIds, IntFunction saltRetreivalFunction, @@ -400,13 +398,13 @@ public void sendVidEventsToCredService(String uin, String status, List eventRequestsList, boolean isUpdate, BiConsumer> credentialRequestResponseConsumer) { eventRequestsList.forEach(reqDto -> { CredentialIssueRequestWrapperDto requestWrapper = new CredentialIssueRequestWrapperDto(); - requestWrapper.setRequest((CredentialRequestV2DTO) reqDto); + requestWrapper.setRequest(reqDto); requestWrapper.setRequesttime(DateUtils.getUTCCurrentDateTime()); String eventTypeDisplayName = isUpdate ? "Update ID" : "Create ID"; mosipLogger.info(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), NOTIFY, @@ -428,17 +426,17 @@ private void sendRequestToCredService(String partnerId, CredentialIssueRequestWr try { Map response = Map.of(); - RestServicesConstants restServicesConstants = ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId() != null - && !((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId().isEmpty() + RestServicesConstants restServicesConstants = requestWrapper.getRequest().getRequestId() != null + && !requestWrapper.getRequest().getRequestId().isEmpty() ? RestServicesConstants.CREDENTIAL_REQUEST_SERVICE_V2 : RestServicesConstants.CREDENTIAL_REQUEST_SERVICE; - Map pathParam = ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId() != null - && !((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId().isEmpty() - ? Map.of(RID, ((CredentialRequestV2DTO) requestWrapper.getRequest()).getRequestId()) + Map pathParam = requestWrapper.getRequest().getRequestId() != null + && !requestWrapper.getRequest().getRequestId().isEmpty() + ? Map.of(RID, requestWrapper.getRequest().getRequestId()) : Map.of(); response = restHelper .requestSync(restBuilder.buildRequest(restServicesConstants, pathParam, requestWrapper, Map.class)); - mosipLogger.info(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), + mosipLogger.debug(IdRepoSecurityManager.getUser(), this.getClass().getCanonicalName(), SEND_REQUEST_TO_CRED_SERVICE, "Response of Credential Request: " + mapper.writeValueAsString(response)); @@ -463,7 +461,6 @@ private void sendRequestToCredService(String partnerId, CredentialIssueRequestWr * @param expiryTimestamp the expiry timestamp * @param transactionLimit the transaction limit * @param token the token - * @param idType the id type * @param idHashAttributes the id hash attributes * @return the credential issue request dto */ @@ -474,7 +471,7 @@ public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, L return createCredReqDto(id,partnerId,expiryTimestamp,transactionLimit,token,idHashAttributes,null); } public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, LocalDateTime expiryTimestamp, - Integer transactionLimit, String token, Map idHashAttributes,String requetId + Integer transactionLimit, String token, Map idHashAttributes,String requestId ) { Map data = new HashMap<>(); data.putAll(idHashAttributes); @@ -483,9 +480,9 @@ public CredentialIssueRequestDto createCredReqDto(String id, String partnerId, L data.put(IdRepoConstants.TRANSACTION_LIMIT, transactionLimit); data.put(IdRepoConstants.TOKEN, token); - CredentialRequestV2DTO credentialIssueRequestDto = new CredentialRequestV2DTO(); + CredentialIssueRequestDto credentialIssueRequestDto = new CredentialIssueRequestDto(); credentialIssueRequestDto.setId(id); - credentialIssueRequestDto.setRequestId(requetId); + credentialIssueRequestDto.setRequestId(requestId); credentialIssueRequestDto.setCredentialType(credentialType); credentialIssueRequestDto.setIssuer(partnerId); credentialIssueRequestDto.setRecepiant(credentialRecepiant); @@ -541,7 +538,6 @@ public void updateEventProcessingStatus(String requestId, String status, String * Creates the event model. * * @param the generic type - * @param the generic type * @param topic the topic * @param event the event * @return the event model @@ -560,7 +556,6 @@ public io.mosip.idrepository.core.dto.EventModel createEventModel(String * * @param requestId the request id * @param status the status - * @param updatedTimestamp the updated timestamp * @return the credential status update event */ private CredentialStatusUpdateEvent createCredentialStatusUpdateEvent(String requestId, String status) { diff --git a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java index 0593800b8..077075a66 100644 --- a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java +++ b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/manager/CredentialStatusManagerTest.java @@ -7,7 +7,6 @@ import java.util.*; import io.mosip.idrepository.core.dto.CredentialIssueResponse; -import io.mosip.idrepository.core.dto.CredentialRequestV2DTO; import io.mosip.idrepository.core.exception.IdRepoAppException; import org.junit.Before; import org.junit.Test; @@ -19,7 +18,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.context.annotation.Import; -import org.springframework.scheduling.annotation.Async; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestContext; import org.springframework.test.context.junit4.SpringRunner; @@ -33,8 +31,6 @@ import io.mosip.idrepository.core.dto.CredentialIssueRequestWrapperDto; import io.mosip.idrepository.core.entity.CredentialRequestStatus; import io.mosip.idrepository.core.logger.IdRepoLogger; -import io.mosip.idrepository.core.manager.CredentialServiceManager; -import io.mosip.idrepository.core.manager.CredentialStatusManager; import io.mosip.idrepository.core.repository.CredentialRequestStatusRepo; import io.mosip.idrepository.core.repository.UinEncryptSaltRepo; import io.mosip.idrepository.core.repository.UinHashSaltRepo; @@ -42,7 +38,6 @@ import io.mosip.idrepository.core.util.DummyPartnerCheckUtil; import io.mosip.idrepository.core.util.EnvUtil; import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.kernel.core.util.DateUtils; import io.mosip.kernel.core.websub.model.Event; import io.mosip.kernel.core.websub.model.EventModel; @@ -196,7 +191,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { request.setId("1"); request.setVersion("2.0"); request.setRequesttime(LocalDateTime.now()); - request.setRequest((CredentialRequestV2DTO) req); + request.setRequest(req); Map response = new HashMap(); response.put("response", "value1"); credentialStatusManager.credentialRequestResponseConsumer(request, response); @@ -212,7 +207,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { additionalData.put("transaction_limit", 3); additionalData.put("expiry_timestamp", LocalDateTime.now()); req.setAdditionalData(additionalData); - request.setRequest((CredentialRequestV2DTO) req); + request.setRequest(req); credentialStatusManagerSpy.credentialRequestResponseConsumer(request, response); CredentialRequestStatus credentialRequestStatus = new CredentialRequestStatus(); @@ -222,7 +217,7 @@ public void credentialRequestResponseConsumerTest() throws IdRepoAppException { additionalData.remove("transaction_limit", 3); req.setAdditionalData(additionalData); - request.setRequest((CredentialRequestV2DTO) req); + request.setRequest(req); credentialStatusManagerSpy.credentialRequestResponseConsumer(request, response); } diff --git a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java index 7dd7ccc90..acc104ac1 100644 --- a/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java +++ b/id-repository/id-repository-core/src/test/java/io/mosip/idrepository/core/test/manager/CredentialServiceManagerTest.java @@ -113,7 +113,7 @@ public void notifyUinCredentialForStatusUpdateTest() throws IdRepoDataValidation partnerIds.add(txnId); String requestId = "123465"; credentialServiceManager.notifyUinCredential(uin, expiryTimestamp, status, isUpdate, txnId, - saltRetreivalFunction, credentialRequestResponseConsumer, idaEventModelConsumer, partnerIds,requestId); + saltRetreivalFunction, credentialRequestResponseConsumer, idaEventModelConsumer, partnerIds, requestId); } } diff --git a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java index e7315dc39..1449b5fa4 100644 --- a/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java +++ b/id-repository/id-repository-identity-service/src/main/java/io/mosip/idrepository/identity/service/impl/IdRepoServiceImpl.java @@ -4,23 +4,12 @@ import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_FORMAT_ATTRIBUTE; import static io.mosip.idrepository.core.constant.IdRepoConstants.FILE_NAME_ATTRIBUTE; import static io.mosip.idrepository.core.constant.IdRepoConstants.SPLITTER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.ID_OBJECT_PROCESSING_FAILED; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.INVALID_INPUT_PARAMETER; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.NO_RECORD_FOUND; -import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.UNKNOWN_ERROR; +import static io.mosip.idrepository.core.constant.IdRepoErrorConstants.*; import java.io.IOException; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -199,7 +188,7 @@ public class IdRepoServiceImpl implements IdRepoService { @Value("${mosip.idrepo.credential.request.enable-convention-based-id:false}") - private boolean isCredentialrequestv2; + private boolean enableConventionBasedId; /** * Adds the identity to DB. @@ -571,7 +560,7 @@ private Entry> getUpdateCountTracker(String uinHash * * @param dbData the db data * @param comparisonResult the comparison result - * @param isUpdateAllowedAsPerPolicy + * @param attribute * @throws IdRepoAppException the id repo app exception */ @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -686,7 +675,7 @@ private void updateMissingValues(DocumentContext inputData, DocumentContext dbDa /** * Update documents. * - * @param uinHash the uin hash + * @param uinHashwithSalt the uin hash * @param uinObject the uin object * @param requestDTO the request DTO * @throws IdRepoAppException the id repo app exception @@ -856,7 +845,7 @@ private Map getRemainingUpdateCountFromConfig(List attr } } - private void issueCredential(String enryptedUin, String uinHash, String uinStatus, LocalDateTime expiryTimestamp) { + private void issueCredential(String enryptedUin, String uinHash, String uinStatus, LocalDateTime expiryTimestamp, String requestId) { List credStatusList = credRequestRepo.findByIndividualIdHash(uinHash); if (!credStatusList.isEmpty() && uinStatus.contentEquals(activeStatus)) { credStatusList.forEach(credStatus -> { @@ -882,7 +871,7 @@ private void issueCredential(String enryptedUin, String uinHash, String uinStatu credStatus.setIdExpiryTimestamp(uinStatus.contentEquals(activeStatus) ? null : expiryTimestamp); credStatus.setCreatedBy(IdRepoSecurityManager.getUser()); credStatus.setCrDTimes(DateUtils.getUTCCurrentDateTime()); - if(isCredentialrequestv2 && (requestId != null)) { + if(enableConventionBasedId && (requestId != null)) { credStatus.setRequestId(requestId); } credRequestRepo.save(credStatus);