diff options
Diffstat (limited to 'modules')
2 files changed, 48 insertions, 5 deletions
| diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java index e180e87d..b4f4098e 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/service/RegisterSearchService.java @@ -4,6 +4,8 @@ import java.io.Serializable;  import java.math.BigInteger;  import java.util.Collections;  import java.util.List; +import java.util.Set; +import java.util.stream.Collectors;  import javax.annotation.Nonnull; @@ -38,6 +40,9 @@ public class RegisterSearchService {    private static final Object ERNP = "ERnP";    private static final String LOG_MSG_RESULTS = "Matching operation: {} results: "         + ZMR + ": {} | " + ERNP + ": {}"; +  private static final String LOG_MSG_RESULTS_CLEARING =  +      "Post-processing of register results find duplicated entries. " +      + "Remove {} entries from " + ERNP + " result.";    private static final String LOG_MSG_KITT = "Matching operation kitts entry on: {}"; @@ -438,9 +443,25 @@ public class RegisterSearchService {            result.getPersonResult(), Collections.emptyList());      } -    static RegisterStatusResults fromZmrAndErnp(ZmrRegisterResult result, ErnpRegisterResult resultErnp) { +    static RegisterStatusResults fromZmrAndErnp(ZmrRegisterResult result, ErnpRegisterResult resultErnp) {       +      /* +       * Post-processing of ERnP entries to remove entities that included twice. +       * In case of KITT on register side that KITTS an ERnP to ZMR entry,  +       * the same entity can part of both responses.       +       */ +      Set<String> existingZmrPersons = result.getPersonResult().stream() +          .map(el -> el.getBpk()) +          .collect(Collectors.toSet());                     +      List<RegisterResult> ernpCleared = resultErnp.getPersonResult().stream() +           .filter(el -> !existingZmrPersons.contains(el.getBpk())) +           .collect(Collectors.toList());            +      if (ernpCleared.size() < resultErnp.getPersonResult().size()) { +        log.info(LOG_MSG_RESULTS_CLEARING, resultErnp.getPersonResult().size() - ernpCleared.size()); +         +      } +              return new RegisterStatusResults(new RegisterOperationStatus(result.getProcessId()), -          result.getPersonResult(), resultErnp.getPersonResult()); +          result.getPersonResult(), ernpCleared);      }      static RegisterStatusResults fromErnp(RegisterOperationStatus status, ErnpRegisterResult updateErnp) { diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java index eef31a02..c9b7b1ac 100644 --- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java +++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/InitialSearchTaskTest.java @@ -97,6 +97,7 @@ import eu.eidas.auth.commons.attribute.ImmutableAttributeMap;  import eu.eidas.auth.commons.attribute.PersonType;  import eu.eidas.auth.commons.light.impl.LightRequest;  import eu.eidas.auth.commons.protocol.impl.AuthenticationResponse; +import lombok.SneakyThrows;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations = { @@ -339,7 +340,7 @@ public class InitialSearchTaskTest {      Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE))          .thenReturn(zmrRegisterResult(randomRegisterResult()));      Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE)) -        .thenReturn(ernpRegisterResult(randomRegisterResult())); +        .thenReturn(ernpRegisterResult(randomRegisterResult(RandomStringUtils.randomAlphanumeric(10))));      // execute task      TaskExecutionException exception = assertThrows(TaskExecutionException.class, @@ -353,6 +354,27 @@ public class InitialSearchTaskTest {    }    /** +   * Find to matches by PersonalId but they are the same person. +   */ +  @Test +  @DirtiesContext +  @SneakyThrows +  public void samePersonFromZmrAndErnp() { +    RegisterResult registerResult = randomRegisterResult(); +    Mockito.when(zmrClient.searchWithPersonIdentifier(null, randomPseudonym, DE)) +        .thenReturn(zmrRegisterResult(registerResult)); +    Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE)) +        .thenReturn(ernpRegisterResult(registerResult)); + +    // execute test +    task.execute(pendingReq, executionContext); + +    // validate state +    checkMatchingSuccessState(pendingReq, randomBpk, randomFamilyName, randomGivenName, randomBirthDate, DE); +     +  } +   +  /**     * One match by PersonalId, no register update needed     */    @Test @@ -545,7 +567,7 @@ public class InitialSearchTaskTest {      Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE))          .thenReturn(emptyErnpRegisterResult());      Mockito.when(ernpClient.searchCountrySpecific(any(), eq(DE))) -        .thenReturn(ernpRegisterResult(randomRegisterResult())); +        .thenReturn(ernpRegisterResult(randomRegisterResult(RandomStringUtils.randomAlphanumeric(10))));      Mockito.when(ernpClient.update(any(), any()))          .thenThrow(new IllegalStateException("ERnP update should not be neccessary")); @@ -722,7 +744,7 @@ public class InitialSearchTaskTest {      Mockito.when(ernpClient.searchWithPersonIdentifier(randomPseudonym, DE)).thenReturn(          emptyErnpRegisterResult());      Mockito.when(ernpClient.searchWithMds(randomGivenName, randomFamilyName, randomBirthDate, DE)) -        .thenReturn(ernpRegisterResult(randomRegisterResult())); +        .thenReturn(ernpRegisterResult(randomRegisterResult(RandomStringUtils.randomAlphanumeric(10))));      Mockito.when(ernpClient.update(any(), any()))          .thenThrow(new IllegalStateException("ERnP update should not be neccessary")); | 
