diff options
| author | Thomas <> | 2022-10-21 11:11:36 +0200 | 
|---|---|---|
| committer | Thomas <> | 2022-10-21 11:11:36 +0200 | 
| commit | 55ab5856a90b065b2a645a62112b380f06cf751c (patch) | |
| tree | 4c0be982a90e655a816464d0b51d272bf94c6bce /modules/authmodule-eIDAS-v2 | |
| parent | 8c09e7fbee0f8e1bc5e1c6e89e2aaf6fa4bec7a5 (diff) | |
| download | National_eIDAS_Gateway-55ab5856a90b065b2a645a62112b380f06cf751c.tar.gz National_eIDAS_Gateway-55ab5856a90b065b2a645a62112b380f06cf751c.tar.bz2 National_eIDAS_Gateway-55ab5856a90b065b2a645a62112b380f06cf751c.zip | |
feat(matching): distiguish between create ERnP entry by automated process or by user decision
Diffstat (limited to 'modules/authmodule-eIDAS-v2')
5 files changed, 85 insertions, 6 deletions
| diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java index faf38b64..0d0d11f8 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java @@ -336,10 +336,20 @@ public class Constants {    /**     * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask}. +   *  +   * <p>In case of an automated decision to create ERnP entry</p>     */    public static final String TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK = "TASK_CreateNewErnpEntryTask";    /** +   * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.CreateNewErnpEntryTask}. +   *  +   * <p>In case of an user decision to create ERnP entry</p> +   */ +  public static final String TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_BY_USER_TASK =  +      "TASK_CreateNewErnpEntryByUserTask"; +   +  /**     * {@link at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateOtherLoginMethodGuiTask}.     */    public static final String TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK = diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java index 563a66ba..5926adc6 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java @@ -23,6 +23,8 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; +import java.io.Serializable; +  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse; @@ -93,7 +95,7 @@ public class CreateNewErnpEntryTask extends AbstractAuthServletTask {        // finish matching process, because new user-entry uniquly matches        log.info("User successfully registerred into ERnP and matching tasks are finished ");       -      MatchingTaskUtils.setMatchingState(pendingReq, MatchingStates.BY_NEW_ERNP_ENTRY); +      MatchingTaskUtils.setMatchingState(pendingReq, selectMatchingStateByContextInfos(executionContext));         MatchingTaskUtils.storeFinalMatchingResult(pendingReq,             MatchedPersonResult.generateFormMatchingResult(                resp.getPersonResult().get(0), simpleEidasData.getCitizenCountryCode())); @@ -104,4 +106,11 @@ public class CreateNewErnpEntryTask extends AbstractAuthServletTask {      }    } +  private MatchingStates selectMatchingStateByContextInfos(ExecutionContext executionContext) {             +    Serializable flag = executionContext.get(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_BY_USER_TASK);    +    return flag != null && (boolean) flag  +        ? MatchingStates.BY_USER_TO_NEW_ERNP_ENTRY : MatchingStates.BY_NEW_ERNP_ENTRY;   + +  } +  } diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java index 5b966ffe..fb4e6e7b 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveOtherLoginMethodGuiResponseTask.java @@ -73,7 +73,8 @@ public class ReceiveOtherLoginMethodGuiResponseTask extends AbstractLocaleAuthSe        Constants.TRANSITION_TO_GENERATE_EIDAS_LOGIN,        Constants.TRANSITION_TO_GENERATE_MOBILE_PHONE_SIGNATURE_REQUEST_TASK,        Constants.TRANSITION_TO_GENERATE_GUI_QUERY_AUSTRIAN_RESIDENCE_TASK, -      Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK); +      Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, +      Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_BY_USER_TASK);    @Override    public void executeWithLocale(ExecutionContext executionContext, HttpServletRequest request, @@ -146,7 +147,7 @@ public class ReceiveOtherLoginMethodGuiResponseTask extends AbstractLocaleAuthSe        case ADD_ME_AS_NEW:          log.info("User selects insert-into-ERnP option. Starting ERnP operation and complete prozess ... "); -        executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true); +        executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_BY_USER_TASK, true);          executionContext.put(Constants.TRANSITION_TO_REQUESTING_NEW_ERNP_ENTRY_TASK, false);          return; diff --git a/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml b/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml index e57f9ca6..3a37a82b 100644 --- a/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml +++ b/modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml @@ -47,7 +47,7 @@                    from="receiveOtherLoginMethodGuiResponseTask"     to="generateAustrianResidenceGuiTask" />    <pd:Transition  conditionExpression="ctx['TASK_RequestingNewErnpEntryTask']"                    from="receiveOtherLoginMethodGuiResponseTask"     to="generateOtherLoginMethodGuiTask" /> -  <pd:Transition  conditionExpression="ctx['TASK_CreateNewErnpEntryTask']" +  <pd:Transition  conditionExpression="ctx['TASK_CreateNewErnpEntryByUserTask']"                    from="receiveOtherLoginMethodGuiResponseTask"     to="createNewErnpEntryTask" />    <!-- alternative eIDAS authentication --> diff --git a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java index 6298e250..c3beff33 100644 --- a/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java +++ b/modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/CreateNewErnpEntryTaskTest.java @@ -27,6 +27,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import org.springframework.web.context.request.RequestContextHolder;  import org.springframework.web.context.request.ServletRequestAttributes; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants.MatchingStates; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.clients.ernp.ErnpRestClient.ErnpRegisterResult;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnpPersonRegisterResult; @@ -55,7 +58,7 @@ public class CreateNewErnpEntryTaskTest {    @Mock ErnpRestClient ernpClient; -  final ExecutionContext executionContext = new ExecutionContextImpl(); +  private ExecutionContext executionContext;    private TestRequestImpl pendingReq;    /** @@ -70,6 +73,8 @@ public class CreateNewErnpEntryTaskTest {      RequestContextHolder.resetRequestAttributes();      RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); +    executionContext = new ExecutionContextImpl(); +          pendingReq = new TestRequestImpl();      pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); @@ -145,10 +150,64 @@ public class CreateNewErnpEntryTaskTest {      assertEquals("givenyname", input.getGivenName(), result.getGivenName());      assertEquals("dateOfBirth", input.getDateOfBirth(), result.getDateOfBirth());      assertEquals("bpk", bpk, result.getBpk()); -    assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode()); +    assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode());    +    assertEquals("matching state", MatchingStates.BY_NEW_ERNP_ENTRY,  +        pendingReq.getRawData(MsEidasNodeConstants.DATA_MATCHING_STATE));    } +  @Test +  @SneakyThrows +  public void insertErnpByAutoselectionSuccess() { +    String bpk = RandomStringUtils.randomAlphabetic(5);   +    SimpleEidasData input = buildInputData();             +    Mockito.when(ernpClient.add(input)) +        .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk)))); +     +    executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true); +     +    // perform test +    task.execute(pendingReq, executionContext); +         +    // validate state +    MatchedPersonResult result = MatchingTaskUtils.getFinalMatchingResult(pendingReq); +    assertNotNull("no matching result", result); +    assertEquals("familyname", input.getFamilyName(), result.getFamilyName()); +    assertEquals("givenyname", input.getGivenName(), result.getGivenName()); +    assertEquals("dateOfBirth", input.getDateOfBirth(), result.getDateOfBirth()); +    assertEquals("bpk", bpk, result.getBpk()); +    assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode());    +    assertEquals("matching state", MatchingStates.BY_NEW_ERNP_ENTRY,  +        pendingReq.getRawData(MsEidasNodeConstants.DATA_MATCHING_STATE)); +     +  } +   +  @Test +  @SneakyThrows +  public void insertErnpByUserSuccess() { +    String bpk = RandomStringUtils.randomAlphabetic(5);   +    SimpleEidasData input = buildInputData();             +    Mockito.when(ernpClient.add(input)) +        .thenReturn(ernpRegisterResult(Arrays.asList(buildErnpResultEntry(input, bpk)))); +     +    executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_BY_USER_TASK, true); +     +    // perform test +    task.execute(pendingReq, executionContext); +         +    // validate state +    MatchedPersonResult result = MatchingTaskUtils.getFinalMatchingResult(pendingReq); +    assertNotNull("no matching result", result); +    assertEquals("familyname", input.getFamilyName(), result.getFamilyName()); +    assertEquals("givenyname", input.getGivenName(), result.getGivenName()); +    assertEquals("dateOfBirth", input.getDateOfBirth(), result.getDateOfBirth()); +    assertEquals("bpk", bpk, result.getBpk()); +    assertEquals("countryCode", input.getCitizenCountryCode(), result.getCountryCode());    +    assertEquals("matching state", MatchingStates.BY_USER_TO_NEW_ERNP_ENTRY,  +        pendingReq.getRawData(MsEidasNodeConstants.DATA_MATCHING_STATE)); +     +  } +      @NotNull    private ErnpRegisterResult ernpRegisterResult(List<RegisterResult> registerResult) { | 
