Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,12 @@ public class HouseholdService {
private final HouseholdEnrichmentService enrichmentService;

private final Predicate<Validator<HouseholdBulkRequest, Household>> isApplicableForCreate = validator ->
validator.getClass().equals(HBoundaryValidator.class)
validator.getClass().equals(HCommunityTypeValidator.class)
|| validator.getClass().equals(HExistentEntityValidator.class)
|| validator.getClass().equals(HCommunityValidator.class)
|| validator.getClass().equals(HCommunityTypeValidator.class);
|| validator.getClass().equals(HCommunityValidator.class);

private final Predicate<Validator<HouseholdBulkRequest, Household>> isApplicableForUpdate = validator ->
validator.getClass().equals(HNullIdValidator.class)
|| validator.getClass().equals(HBoundaryValidator.class)
|| validator.getClass().equals(HIsDeletedValidator.class)
|| validator.getClass().equals(HUniqueEntityValidator.class)
|| validator.getClass().equals(HNonExistentEntityValidator.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,101 +43,15 @@ public IndividualEncryptionService(EncryptionDecryptionUtil encryptionDecryption


public List<Individual> encrypt(IndividualBulkRequest request, List<Individual> individuals, String key, boolean isBulk) {
List<Individual> encryptedIndividuals = (List<Individual>) encryptionDecryptionUtil
.encryptObject(individuals, key, Individual.class);
validateAadhaarUniqueness(encryptedIndividuals, request, isBulk);
return encryptedIndividuals;

return individuals;
}

public IndividualSearch encrypt(IndividualSearch individualSearch, String key) {
IndividualSearch encryptedIndividualSearch = (IndividualSearch) encryptionDecryptionUtil
.encryptObject(individualSearch, key, IndividualSearch.class);
return encryptedIndividualSearch;
return individualSearch;
}

public List<Individual> decrypt(List<Individual> individuals, String key, RequestInfo requestInfo) {
List<Individual> encryptedIndividuals = filterEncryptedIndividuals(individuals);
List<Individual> decryptedIndividuals = (List<Individual>) encryptionDecryptionUtil
.decryptObject(encryptedIndividuals, key, Individual.class, requestInfo);
if (individuals.size() > decryptedIndividuals.size()) {
// add the already decrypted objects to the list
List<String> ids = decryptedIndividuals.stream()
.map(Individual::getId)
.collect(Collectors.toList());
for (Individual individual : individuals) {
if (!ids.contains(individual.getId())) {
decryptedIndividuals.add(individual);
}
}
}
return decryptedIndividuals;
}

private List<Individual> filterEncryptedIndividuals(List<Individual> individuals) {
return individuals.stream()
.filter(individual -> isCipherText(individual.getMobileNumber())
|| isCipherText(!CollectionUtils.isEmpty(individual.getIdentifiers())
? individual.getIdentifiers().stream().findAny().get().getIdentifierId()
: null))
.collect(Collectors.toList());
}

private boolean isCipherText(String text) {
//sample encrypted data - 640326|7hsFfY6olwUbet1HdcLxbStR1BSkOye8N3M=
//Encrypted data will have a prefix followed by '|' and the base64 encoded data
if ((StringUtils.isNotBlank(text) && text.contains("|"))) {
String base64Data = text.split("\\|")[1];
return StringUtils.isNotBlank(base64Data) && (base64Data.length() % 4 == 0 || base64Data.endsWith("="));
}
return false;
}

private void validateAadhaarUniqueness (List<Individual> individuals, IndividualBulkRequest request, boolean isBulk) {

Map<Individual, List<Error>> errorDetailsMap = new HashMap<>();
String tenantId = getTenantId(individuals);

if (!individuals.isEmpty()) {
for (Individual individual : individuals) {
if (!CollectionUtils.isEmpty(individual.getIdentifiers())) {
Identifier identifier = individual.getIdentifiers().stream()
.filter(id -> id.getIdentifierType().contains("AADHAAR"))
.findFirst().orElse(null);
if (identifier != null && StringUtils.isNotBlank(identifier.getIdentifierId())) {
Identifier identifierSearch = Identifier.builder().identifierType(identifier
.getIdentifierType()).identifierId(identifier.getIdentifierId()).build();
IndividualSearch individualSearch = IndividualSearch.builder().identifier(identifierSearch).build();
List<Individual> individualsList = null;
try {
individualsList = individualRepository.find(individualSearch,null,
null,tenantId,null,false).getResponse();
} catch (Exception exception) {
log.error("database error occurred", ExceptionUtils.getStackTrace(exception));
throw new CustomException("DATABASE_ERROR", exception.getMessage());
}
if (!CollectionUtils.isEmpty(individualsList)) {
boolean isSelfIdentifier = individualsList.stream()
.anyMatch(ind -> ind.getId().equalsIgnoreCase(individual.getId()));
if (!isSelfIdentifier) {
Error error = Error.builder().errorMessage("Aadhaar already exists for Individual - "
+individualsList.get(0).getIndividualId()).errorCode("DUPLICATE_AADHAAR")
.type(Error.ErrorType.NON_RECOVERABLE)
.exception(new CustomException("DUPLICATE_AADHAAR", "Aadhaar already exists for Individual - "
+individualsList.get(0).getIndividualId())).build();
populateErrorDetails(individual, error, errorDetailsMap);
}
}
}

}
}
}

if (!errorDetailsMap.isEmpty()) {
Map<Individual, ErrorDetails> errorDetailsMapForTracer = new HashMap<>();
Stream.of(errorDetailsMap).forEach(e -> populateErrorDetails(request, errorDetailsMapForTracer, e,
SET_INDIVIDUALS));
handleErrors(errorDetailsMapForTracer, isBulk, VALIDATION_ERROR);
}
return individuals;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ public class IndividualService {

private final Predicate<Validator<IndividualBulkRequest, Individual>> isApplicableForUpdate = validator ->
validator.getClass().equals(NullIdValidator.class)
|| validator.getClass().equals(IBoundaryValidator.class)
|| validator.getClass().equals(IsDeletedValidator.class)
|| validator.getClass().equals(IsDeletedSubEntityValidator.class)
|| validator.getClass().equals(NonExistentEntityValidator.class)
Expand All @@ -98,7 +97,6 @@ public class IndividualService {
private final Predicate<Validator<IndividualBulkRequest, Individual>> isApplicableForCreate = validator ->
validator.getClass().equals(AddressTypeValidator.class)
|| validator.getClass().equals(IExistentEntityValidator.class)
|| validator.getClass().equals(IBoundaryValidator.class)
|| validator.getClass().equals(UniqueSubEntityValidator.class)
|| validator.getClass().equals(MobileNumberValidator.class)
|| validator.getClass().equals(AadharNumberValidatorForCreate.class)
Expand Down
Loading