aboutsummaryrefslogtreecommitdiff
path: root/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveAustrianResidenceGuiResponseTask.java
diff options
context:
space:
mode:
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.java90
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);