Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MOSIP-34112 code changes #1895

Merged
merged 3 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/push-trigger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ on:
- master
- 1.*
- develop
- MOSIP-34112_release

jobs:
build-maven-registration:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,45 +1,49 @@
package io.mosip.registration.processor.biodedupe.constants;

public class BioDedupeConstants {

/** The Constant FILE_SEPARATOR. */
public static final String FILE_SEPARATOR = "\\";

/** The Constant INDIVIDUAL_BIOMETRICS. */
public static final String INDIVIDUAL_BIOMETRICS = "individualBiometrics";

public static final String VALUE = "value";

public static final String CBEFF_PRESENT_IN_PACKET = "Cbeff is present in the packet, destination stage is abis_handler";

public static final String CBEFF_NOT_PRESENT_IN_PACKET = "Cbeff is not present in the packet. This will be sent to manual verification.";

public static final String CBEFF_ABSENT_IN_PACKET = "Cbeff is absent in the packet for child, destination stage is UIN";

public static final String UPDATE_PACKET_BIOMETRIC_NOT_NULL = "Update packet individual biometric not null, destination stage is abis_handler";

public static final String UPDATE_PACKET_BIOMETRIC_NULL = "Update packet individual biometric null, destination stage is UIN";

public static final String ABIS_RESPONSE_NOT_NULL = "ABIS response Details not null, destination stage is Manual_verification";

public static final String ABIS_RESPONSE_NULL = "ABIS response Details null, destination stage is UIN";

public static final String CBEFF_NOT_FOUND = "Cbeff not found for the lost packet";

public static final String APPLICANT_TYPE_CHILD = "Applicant type is child and Cbeff not present returning false";

public static final String APPLICANT_TYPE_ADULT = "Applicant type is adult and Cbeff not present throwing exception";

public static final String LOST_PRE_ABIS_IDENTITIFICATION = "Lost Packet Pre abis identification";

public static final String NO_MATCH_FOUND_FOR_LOST = "No match found, rejecting the lost packet for ";

public static final String FOUND_UIN_IN_BIO_CHECK = "Found a matching UIN in bio check for the lost packet ";

public static final String FOUND_UIN_IN_DEMO_CHECK = "Found a matching UIN in demo check for the lost packet ";

public static final String MULTIPLE_RID_FOUND = "Multiple matched regId found, saving data in manual verification";

/** The Constant INTERNAL_ERROR. */
private static final String INTERNAL_ERROR = "Internal error occurred in bio-dedupe stage while processing for registrationId ";
}
package io.mosip.registration.processor.biodedupe.constants;

public class BioDedupeConstants {

/** The Constant FILE_SEPARATOR. */
public static final String FILE_SEPARATOR = "\\";

/** The Constant INDIVIDUAL_BIOMETRICS. */
public static final String INDIVIDUAL_BIOMETRICS = "individualBiometrics";

public static final String VALUE = "value";

public static final String CBEFF_PRESENT_IN_PACKET = "Cbeff is present in the packet, destination stage is abis_handler";

public static final String CBEFF_NOT_PRESENT_IN_PACKET = "Cbeff is not present in the packet. This will be sent to manual verification.";

public static final String CBEFF_ABSENT_IN_PACKET = "Cbeff is absent in the packet for child, destination stage is UIN";

public static final String UPDATE_PACKET_BIOMETRIC_NOT_NULL = "Update packet individual biometric not null, destination stage is abis_handler";

public static final String UPDATE_PACKET_BIOMETRIC_NULL = "Update packet individual biometric null, destination stage is UIN";

public static final String ABIS_RESPONSE_NOT_NULL = "ABIS response Details not null, destination stage is Manual_verification";

public static final String ABIS_RESPONSE_NULL = "ABIS response Details null, destination stage is UIN";

public static final String CBEFF_NOT_FOUND = "Cbeff not found for the lost packet";

public static final String APPLICANT_TYPE_CHILD = "Applicant type is child and Cbeff not present returning false";

public static final String APPLICANT_TYPE_ADULT = "Applicant type is adult and Cbeff not present throwing exception";

public static final String LOST_PRE_ABIS_IDENTITIFICATION = "Lost Packet Pre abis identification";

public static final String NO_MATCH_FOUND_FOR_LOST = "No match found, rejecting the lost packet for ";

public static final String FOUND_UIN_IN_BIO_CHECK = "Found a matching UIN in bio check for the lost packet ";

public static final String FOUND_UIN_IN_DEMO_CHECK = "Found a matching UIN in demo check for the lost packet ";

public static final String MULTIPLE_RID_FOUND = "Multiple matched regId found, saving data in manual verification";

/** The Constant INTERNAL_ERROR. */
private static final String INTERNAL_ERROR = "Internal error occurred in bio-dedupe stage while processing for registrationId ";

public static final String ABIS_RESPONSE_MATCHING = "ABIS response Details matching, destination stage is UIN";

public static final String NO_MATCH_FOUND_FOR_UPDATE = "No match found, rejecting the Update packet for ";
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import org.apache.commons.lang3.exception.ExceptionUtils;
Expand Down Expand Up @@ -132,6 +134,9 @@ public class BioDedupeProcessor {
@Value("${registration.processor.missing.biometric.verification.enabled:true}")
private boolean missingBiometricVerificationEnabled;

@Value("${registration.processor.biometrics-update.single-match.auto-reject.enabled:false}")
private boolean biometricsUpdateSingleMatchAutoReject;

/** The reg proc logger. */
private static Logger regProcLogger = RegProcessorLogger.getLogger(BioDedupeProcessor.class);

Expand Down Expand Up @@ -435,24 +440,96 @@ private void postAbisIdentification(InternalRegistrationStatusDto registrationSt
registrationStatusDto.getRegistrationId(), BioDedupeConstants.ABIS_RESPONSE_NULL);

} else {
registrationStatusDto.setStatusCode(RegistrationStatusCode.FAILED.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getCode());
registrationStatusDto.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.FAILED.toString());
moduleId = PlatformSuccessMessages.RPR_BIO_METRIC_POTENTIAL_MATCH.getCode();
packetInfoManager.saveManualAdjudicationData(matchedRegIds, object,
DedupeSourceName.BIO, moduleId, moduleName,null,null);
//send message to manual adjudication
object.setInternalError(Boolean.FALSE);
object.setRid(registrationStatusDto.getRegistrationId());
object.setIsValid(Boolean.TRUE);
object.setReg_type(registrationType);
object.setMessageBusAddress(MessageBusAddress.MANUAL_ADJUDICATION_BUS_IN);
if (registrationType.equalsIgnoreCase(RegistrationType.UPDATE.name())) {
updatePostAbisIdentification(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
}else {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName, matchedRegIds);

regProcLogger.info(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(),
registrationStatusDto.getRegistrationId(), BioDedupeConstants.ABIS_RESPONSE_NOT_NULL);
}
}
}

private void updatePostAbisIdentification(InternalRegistrationStatusDto registrationStatusDto, MessageDTO object,
String registrationType, String moduleName, Set<String> matchedRegIds)
throws IOException, ApisResourceAccessException, PacketManagerException, JsonProcessingException {
Set<String> uniqueUins = new HashSet<String>();
boolean sendToManualAdjudication = false;
for(String matchedRegistrationId:matchedRegIds) {
String uin = idRepoService.getUinByRid(matchedRegistrationId, utilities.getGetRegProcessorDemographicIdentity());
// TODO need to check this condition is necessary
if (StringUtils.isEmpty(uin)) {
InternalRegistrationStatusDto matchedRegistrationStatusDto = registrationStatusService
.getRegistrationStatus(matchedRegistrationId, null, null, null);
if (matchedRegistrationStatusDto.getStatusCode()
.equals(RegistrationStatusCode.PROCESSING.name())) {
sendToManualAdjudication = true;
break;
}
} else {
uniqueUins.add(uin);
}
}
if (sendToManualAdjudication || uniqueUins.size() > 1) {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
} else {
Optional<String> optionalMatchedUin = uniqueUins.stream().findFirst();
String matchedUIN = optionalMatchedUin.get();
String updateUin = utilities.getUIn(registrationStatusDto.getRegistrationId(), registrationType,
ProviderStageName.BIO_AUTH);
if (StringUtils.equals(matchedUIN, updateUin)) {
registrationStatusDto
.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.SUCCESS.toString());
object.setIsValid(Boolean.TRUE);
registrationStatusDto.setStatusCode(RegistrationStatusCode.PROCESSING.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_SUCCESS.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_SUCCESS.getCode());
regProcLogger.info(LoggerFileConstant.SESSIONID.toString(),
LoggerFileConstant.REGISTRATIONID.toString(), registrationStatusDto.getRegistrationId(),
BioDedupeConstants.ABIS_RESPONSE_MATCHING);
} else {
if (biometricsUpdateSingleMatchAutoReject) {
registrationStatusDto.setLatestTransactionStatusCode(
RegistrationTransactionStatusCode.FAILED.toString());
object.setIsValid(Boolean.FALSE);
registrationStatusDto.setStatusCode(RegistrationStatusCode.REJECTED.name());
registrationStatusDto
.setStatusComment(StatusUtil.UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND.getMessage());
registrationStatusDto
.setSubStatusCode(StatusUtil.UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND.getCode());
regProcLogger.info(LoggerFileConstant.SESSIONID.toString(),
LoggerFileConstant.REGISTRATIONID.toString(),
registrationStatusDto.getRegistrationId(),
BioDedupeConstants.NO_MATCH_FOUND_FOR_UPDATE
+ registrationStatusDto.getRegistrationId());
} else {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
}

}
}
}

private void sendToManualAdjudicationStage(InternalRegistrationStatusDto registrationStatusDto, MessageDTO object,
String registrationType, String moduleName, Set<String> matchedRegIds) {
String moduleId;
registrationStatusDto.setStatusCode(RegistrationStatusCode.FAILED.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getCode());
registrationStatusDto.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.FAILED.toString());
moduleId = PlatformSuccessMessages.RPR_BIO_METRIC_POTENTIAL_MATCH.getCode();
packetInfoManager.saveManualAdjudicationData(matchedRegIds, object,
DedupeSourceName.BIO, moduleId, moduleName,null,null);
//send message to manual adjudication
object.setInternalError(Boolean.FALSE);
object.setRid(registrationStatusDto.getRegistrationId());
object.setIsValid(Boolean.TRUE);
object.setReg_type(registrationType);
object.setMessageBusAddress(MessageBusAddress.MANUAL_ADJUDICATION_BUS_IN);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ public void testBioDeDupUpdatePacketHandlerProcessingSuccess() throws ApisResour
* @throws RegistrationProcessorCheckedException
*/
@Test
@Ignore
public void testBioDeDupUpdatePacketHandlerProcessingFailure() throws ApisResourceAccessException, IOException,
PacketDecryptionFailureException, io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
Expand All @@ -460,7 +461,7 @@ public void testBioDeDupUpdatePacketHandlerProcessingFailure() throws ApisResour
Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);

ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", false);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertTrue(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
Expand Down Expand Up @@ -685,4 +686,46 @@ public void testApisResourceAccessException() throws Exception {
assertTrue(messageDto.getIsValid());
assertTrue(messageDto.getInternalError());
}

@Test
public void testBioDeDupUpdatePacketHandlerProcessingSuccessWithAutoRejectEnable()
throws ApisResourceAccessException, IOException, PacketDecryptionFailureException,
io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
registrationStatusDto.setRegistrationType("UPDATE");
Mockito.when(registrationStatusService.getRegistrationStatus(any(), any(), any(), any()))
.thenReturn(registrationStatusDto);
Mockito.when(abisHandlerUtil.getPacketStatus(any())).thenReturn(AbisConstant.POST_ABIS_IDENTIFICATION);

Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);
when(idRepoService.getUinByRid(any(), any())).thenReturn("9403107397");
Mockito.when(utility.getUIn(anyString(), anyString(), any())).thenReturn("9403107397");
ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", true);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertTrue(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
}

@Test
public void testBioDeDupUpdatePacketHandlerProcessingFailWithAutoRejectEnable()
throws ApisResourceAccessException, IOException, PacketDecryptionFailureException,
io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
registrationStatusDto.setRegistrationType("UPDATE");
Mockito.when(registrationStatusService.getRegistrationStatus(any(), any(), any(), any()))
.thenReturn(registrationStatusDto);
Mockito.when(abisHandlerUtil.getPacketStatus(any())).thenReturn(AbisConstant.POST_ABIS_IDENTIFICATION);

Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);
when(idRepoService.getUinByRid(any(), any())).thenReturn("9403107397");
Mockito.when(utility.getUIn(anyString(), anyString(), any())).thenReturn("9403107396");
ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", true);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertFalse(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@ public enum StatusUtil {
LOST_PACKET_MULTIPLE_MATCH_FOUND(StatusConstants.BIO_DEDUPE_MODULE_FAILED + "003",
"Multiple Match was Found for the Biometrics Received"),

UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND(StatusConstants.BIO_DEDUPE_MODULE_FAILED + "004",
"No Match was Found for the Biometrics Received"),

// Biometric authentication stage
BIOMETRIC_AUTHENTICATION_FAILED(StatusConstants.BIO_METRIC_AUTHENTICATION_MODULE_FAILED + "001",
"Biometric Authentication has Failed"),
Expand Down
Loading