diff options
Diffstat (limited to 'eidas_modules')
-rw-r--r-- | eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java | 123 |
1 files changed, 46 insertions, 77 deletions
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java index 220c4e56..4103939d 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java @@ -23,24 +23,6 @@ package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; -import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK; -import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.joda.time.DateTime; -import org.springframework.stereotype.Component; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; - import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MatchedPersonResult; import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult; @@ -58,11 +40,26 @@ 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.modules.AbstractAuthServletTask; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import eu.eidas.auth.commons.attribute.AttributeDefinition; import eu.eidas.auth.commons.attribute.AttributeValue; import eu.eidas.auth.commons.light.ILightResponse; import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.joda.time.DateTime; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK; +import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK; /** * Task that searches registers (ERnP and ZMR) before adding person to SZR. @@ -88,6 +85,7 @@ import lombok.extern.slf4j.Slf4j; * * @author amarsalek * @author ckollmann + * @author tlenz */ @Slf4j @Component("InitialSearchTask") @@ -99,6 +97,7 @@ public class InitialSearchTask extends AbstractAuthServletTask { /** * Constructor. + * * @param registerSearchService Service for register search access * @param eidPostProcessor Country-Specific post processing of attributes */ @@ -106,7 +105,6 @@ public class InitialSearchTask extends AbstractAuthServletTask { ICcSpecificEidProcessingService eidPostProcessor) { this.registerSearchService = registerSearchService; this.eidPostProcessor = eidPostProcessor; - } @Override @@ -116,120 +114,91 @@ public class InitialSearchTask extends AbstractAuthServletTask { final SimpleEidasData eidasData = convertEidasAttrToSimpleData(); MatchingTaskUtils.storeInitialEidasData(pendingReq, eidasData); step2RegisterSearchWithPersonIdentifier(executionContext, eidasData); - - } catch (WorkflowException e) { + } catch (WorkflowException e) { throw new TaskExecutionException(pendingReq, "Initial search failed", e); - } catch (final Exception e) { log.error("Initial search failed", e); throw new TaskExecutionException(pendingReq, "Initial search failed with a generic error", e); - } } private void step2RegisterSearchWithPersonIdentifier( ExecutionContext executionContext, SimpleEidasData eidasData) throws WorkflowException, EaafStorageException { - try { + try { log.trace("Starting step2RegisterSearchWithPersonIdentifier"); - RegisterStatusResults initialSearchResult = registerSearchService.searchWithPersonIdentifier(eidasData); + RegisterStatusResults initialSearchResult = registerSearchService.searchWithPersonIdentifier(eidasData); int resultCount = initialSearchResult.getResultCount(); if (resultCount == 0) { step6CountrySpecificSearch(executionContext, initialSearchResult.getOperationStatus(), eidasData); - - } else if (resultCount == 1) { - // find person by PersonalIdentifier --> finalize first matching task - foundMatchFinializeTask(initialSearchResult, eidasData); - + } else if (resultCount == 1) { + foundMatchFinalizeTask(initialSearchResult, eidasData); } else { - throw new WorkflowException("step2RegisterSearchWithPersonIdentifier", + throw new WorkflowException("step2RegisterSearchWithPersonIdentifier", "More than one entry with unique personal-identifier", true); - } - } catch (WorkflowException e) { - //TODO: what we do in case of a workflow error and manual matching are necessary?? - - log.warn("Workflow error during matching step: {}. Reason: {}", e.getProcessStepName(), e.getErrorReason()); + //TODO: what we do in case of a workflow error and manual matching are necessary?? + log.warn("Workflow error during matching step: {}. Reason: {}", e.getProcessStepName(), e.getErrorReason()); throw e; - } } - + private void step6CountrySpecificSearch( ExecutionContext executionContext, RegisterOperationStatus registerOperationStatus, SimpleEidasData eidasData) throws EaafStorageException, WorkflowException { - log.trace("Starting 'step6CountrySpecificSearch' ... "); RegisterStatusResults countrySpecificResult = registerSearchService.searchWithCountrySpecifics( registerOperationStatus, eidasData); if (countrySpecificResult.getResultCount() == 0) { log.trace("'step6CountrySpecificSearch' ends with no result. Forward to next matching step ... "); step8RegisterSearchWithMds(executionContext, countrySpecificResult.getOperationStatus(), eidasData); - } else if (countrySpecificResult.getResultCount() == 1) { log.trace("'step6CountrySpecificSearch' finds a person. Forward to 'step7aKittProcess' step ... "); registerSearchService.step7aKittProcess(countrySpecificResult, eidasData); - - // find person by country-specific information --> finalize first matching task - foundMatchFinializeTask(countrySpecificResult, eidasData); - + foundMatchFinalizeTask(countrySpecificResult, eidasData); } else { - throw new WorkflowException("step6CountrySpecificSearch", - "More than one entry with unique country-specific informations", true); - - } + throw new WorkflowException("step6CountrySpecificSearch", + "More than one entry with unique country-specific information", true); + } } - private void step8RegisterSearchWithMds(ExecutionContext executionContext, - RegisterOperationStatus registerOperationStatus, SimpleEidasData eidasData) + private void step8RegisterSearchWithMds(ExecutionContext executionContext, + RegisterOperationStatus registerOperationStatus, SimpleEidasData eidasData) throws EaafStorageException, WorkflowException { log.trace("Starting step8RegisterSearchWithMds"); RegisterStatusResults registerData = registerSearchService.searchWithMds(registerOperationStatus, eidasData); - if (registerData.getResultCount() == 0) { log.debug("Matching step: 'step8RegisterSearchWithMds' has no result. Forward to create new ERnP entry ... "); executionContext.put(TRANSITION_TO_CREATE_NEW_ERNP_ENTRY_TASK, true); - } else { log.debug("Matching step: 'step8RegisterSearchWithMds' has #{} results. " + "Forward to GUI based matching steps ... ", registerData.getResultCount()); - MatchingTaskUtils.storeIntermediateMatchingResult(pendingReq, registerData); executionContext.put(TRANSITION_TO_GENERATE_OTHER_LOGIN_METHOD_GUI_TASK, true); - } } - - - private void foundMatchFinializeTask(RegisterStatusResults searchResult, SimpleEidasData eidasData) + private void foundMatchFinalizeTask(RegisterStatusResults searchResult, SimpleEidasData eidasData) throws WorkflowException, EaafStorageException { - // check if register update is required RegisterResult updatedResult = step3CheckRegisterUpdateNecessary(searchResult.getResult(), eidasData); - - // store search result - MatchingTaskUtils.storeFinalMatchingResult(pendingReq, - MatchedPersonResult.generateFormMatchingResult(updatedResult, eidasData.getCitizenCountryCode())); - + MatchedPersonResult result = MatchedPersonResult.generateFormMatchingResult( + updatedResult, eidasData.getCitizenCountryCode()); + MatchingTaskUtils.storeFinalMatchingResult(pendingReq, result); } - - private RegisterResult step3CheckRegisterUpdateNecessary(RegisterResult searchResult, - SimpleEidasData eidasData) throws WorkflowException { + + private RegisterResult step3CheckRegisterUpdateNecessary(RegisterResult searchResult, + SimpleEidasData eidasData) throws WorkflowException { log.trace("Starting step3CheckRegisterUpdateNecessary"); if (!eidasData.equalsRegisterData(searchResult)) { log.info("Skipping update-register-information step, because it's not supported yet"); - //TODO: return updated search result if updates are allowed return searchResult; - - } else { - log.debug("Register information match to eIDAS information. No update requird"); + } else { + log.debug("Register information match to eIDAS information. No update required"); return searchResult; - } - } - + @NotNull private SimpleEidasData convertEidasAttrToSimpleData() throws EidasAttributeException, EidPostProcessingException { @@ -237,7 +206,6 @@ public class InitialSearchTask extends AbstractAuthServletTask { .getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class); Map<String, Object> simpleMap = convertEidasAttrToSimpleMap(eidasResponse.getAttributes().getAttributeMap()); return eidPostProcessor.postProcess(simpleMap); - } private Map<String, Object> convertEidasAttrToSimpleMap( @@ -249,7 +217,7 @@ public class InitialSearchTask extends AbstractAuthServletTask { final DateTime attribute = EidasResponseUtils.translateDateAttribute(el, attributeMap.get(el).asList()); if (attribute != null) { result.put(el.getFriendlyName(), attribute); - log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), attribute.toString()); + log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), attribute); } else { log.info("Ignore empty 'DateTime' attribute"); } @@ -258,7 +226,7 @@ public class InitialSearchTask extends AbstractAuthServletTask { .translateAddressAttribute(el, attributeMap.get(el).asList()); if (addressAttribute != null) { result.put(el.getFriendlyName(), addressAttribute); - log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), addressAttribute.toString()); + log.trace("Find attr '{}' with value: {}", el.getFriendlyName(), addressAttribute); } else { log.info("Ignore empty 'PostalAddress' attribute"); } @@ -273,7 +241,8 @@ public class InitialSearchTask extends AbstractAuthServletTask { } } } - log.debug("Receive #{} attributes with names: {}", result.size(), result.keySet().toString()); + log.debug("Receive #{} attributes with names: {}", result.size(), result.keySet()); return result; } + } |