diff options
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java')
-rw-r--r-- | eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java index d565c329..6d050dc1 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java @@ -31,6 +31,7 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ManualFixNeces import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException; import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.RegisterSearchService; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; +import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper; import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; @@ -46,12 +47,26 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Enumeration; -import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.DATA_INITIAL_REGISTER_RESULT; -import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.DATA_SIMPLE_EIDAS; /** * Task receives the response of {@link GenerateAustrianResidenceGuiTask} and handles it. * This corresponds to Steps 17B, 18, 19 in the eIDAS Matching Concept. + * <p> + * Input: + * <ul> + * <li>{@link Constants#DATA_SIMPLE_EIDAS} initial login data from user</li> + * <li>{@link Constants#DATA_INITIAL_REGISTER_RESULT} results from search in registers with personIdentifier</li> + * </ul> + * Output: + * <ul> + * <li>{@link Constants#DATA_RESULT_MATCHING_BPK} if one register result found</li> + * </ul> + * Transitions: + * <ul> + * <li>{@link CreateNewErnpEntryTask}</li> if no results from search with residency data in registers + * <li>{@link CreateIdentityLinkTask}</li> if one exact match between initial register search (with MDS) and results + * from search with residency data in registers exists + * </ul> * * @author amarsalek * @author ckollmann @@ -85,45 +100,68 @@ public class ReceiveAustrianResidenceGuiResponseTask extends AbstractAuthServlet throws TaskExecutionException { log.trace("Starting ReceiveAustrianResidenceGuiResponseTask"); UserInput input = parseHtmlInput(request); - if (input.isFormerResidenceAvailable()) { - if (input.getStreet().isEmpty() || input.getCity().isEmpty() || input.getZipcode().isEmpty()) { - // form should ensure that mandatory fields are field => this should never happen - throw new TaskExecutionException(pendingReq, "Invalid user input", new InvalidUserInputException()); - } - // TODO Also search with MDS? - MergedRegisterSearchResult result = registerSearchService + if (!input.isFormerResidenceAvailable()) { + moveToNextTask(executionContext); + return; + } + if (input.getStreet().isEmpty() || input.getCity().isEmpty() || input.getZipcode().isEmpty()) { + // HTML form should ensure that mandatory fields are set => this should never happen + throw new TaskExecutionException(pendingReq, "Invalid user input", new InvalidUserInputException()); + } + // TODO Also search with MDS? But MDS Search has already happened? + try { + SimpleEidasData eidasData = getInitialEidasData(); + MergedRegisterSearchResult residencyResult = registerSearchService .searchWithResidence(input.zipcode, input.city, input.street); - if (result.getResultCount() == 0) { + if (residencyResult.getResultCount() == 0) { moveToNextTask(executionContext); - return; - } else if (result.getResultCount() == 1) { - compareSearchResultWithInitialData(executionContext, result); + } else if (residencyResult.getResultCount() == 1) { + compareSearchResultWithInitialData(executionContext, residencyResult, eidasData); } else { - throw new TaskExecutionException(pendingReq, "Manual Fix necessary", new ManualFixNecessaryException("todo")); + throw new TaskExecutionException(pendingReq, + "Manual Fix necessary", new ManualFixNecessaryException(eidasData)); } - } else { - moveToNextTask(executionContext); + } catch (EaafStorageException e) { + log.error("Search with residency data failed", e); + throw new TaskExecutionException(pendingReq, "Search with residency data failed", e); } } - private void compareSearchResultWithInitialData(ExecutionContext executionContext, MergedRegisterSearchResult result) - throws TaskExecutionException { + private void compareSearchResultWithInitialData(ExecutionContext executionContext, + MergedRegisterSearchResult residencyResult, SimpleEidasData eidasData) + throws TaskExecutionException, EaafStorageException { try { - AuthProcessDataWrapper authProcessDataWrapper = pendingReq.getSessionData(AuthProcessDataWrapper.class); - MergedRegisterSearchResult initialSearchResult = authProcessDataWrapper - .getGenericDataFromSession(DATA_INITIAL_REGISTER_RESULT, MergedRegisterSearchResult.class); - SimpleEidasData simpleEidasData = authProcessDataWrapper - .getGenericDataFromSession(DATA_SIMPLE_EIDAS, SimpleEidasData.class); - if (simpleEidasData.equalsRegisterData(result)) { - registerSearchService.step7aKittProcess(initialSearchResult, result, simpleEidasData, pendingReq); + MergedRegisterSearchResult initialSearchResult = getInitialRegisterResult(); + // TODO search "residencyResult" in "initialSearchResult"!? + if (eidasData.equalsRegisterData(residencyResult)) { + String bpk = registerSearchService + .step7aKittProcess(initialSearchResult, residencyResult, eidasData, pendingReq); + storeMatchingBpk(bpk); } else { moveToNextTask(executionContext); } } catch (WorkflowException e) { - throw new TaskExecutionException(pendingReq, "Search failed", new ManualFixNecessaryException("todo")); + throw new TaskExecutionException(pendingReq, "Search failed", new ManualFixNecessaryException(eidasData)); } } + private SimpleEidasData getInitialEidasData() { + return getAuthProcessDataWrapper().getGenericDataFromSession(Constants.DATA_SIMPLE_EIDAS, SimpleEidasData.class); + } + + private MergedRegisterSearchResult getInitialRegisterResult() { + return getAuthProcessDataWrapper().getGenericDataFromSession(Constants.DATA_INITIAL_REGISTER_RESULT, + MergedRegisterSearchResult.class); + } + + private void storeMatchingBpk(String bpk) throws EaafStorageException { + getAuthProcessDataWrapper().setGenericDataToSession(Constants.DATA_RESULT_MATCHING_BPK, bpk); + } + + private AuthProcessDataWrapper getAuthProcessDataWrapper() { + return pendingReq.getSessionData(AuthProcessDataWrapper.class); + } + private void moveToNextTask(ExecutionContext executionContext) { // Later on, this should transition to Step 20 executionContext.put(Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true); |