aboutsummaryrefslogtreecommitdiff
path: root/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.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/InitialSearchTask.java')
-rw-r--r--eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java190
1 files changed, 80 insertions, 110 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 0812f55e..ae89a4a0 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 A-SIT Plus GmbH
+ * Copyright 2020 A-SIT Plus GmbH
* AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
* A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
*
@@ -27,12 +27,11 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.MergedRegisterSearchResult;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernb.IErnbClient;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidPostProcessingException;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernp.IErnpClient;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.EidasAttributeException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ManualFixNecessaryException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.WorkflowException;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.ICountrySpecificDetailSearchProcessor;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.CountrySpecificDetailSearchProcessor;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.utils.EidasResponseUtils;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.zmr.IZmrClient;
import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
@@ -53,36 +52,37 @@ import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
- * Task that searches ErnB and ZMR before adding person to SZR.
+ * Task that searches ErnP and ZMR before adding person to SZR.
*
- * @author tlenz
+ * @author amarsalek
*/
@Slf4j
@Component("InitialSearchTask")
-// NOTE: General: Please rebase git commit and squash them where useful, i.e. "remove unused import" should
-// not be a separate commit.
public class InitialSearchTask extends AbstractAuthServletTask {
- private List<ICountrySpecificDetailSearchProcessor> handlers = new ArrayList<>();
-
- private IErnbClient ernbClient;
- private IZmrClient zmrClient;
+ private final List<CountrySpecificDetailSearchProcessor> handlers;
+ private final IErnpClient ernpClient;
+ private final IZmrClient zmrClient;
private ExecutionContext executionContext;
-
- /*
- * (non-Javadoc)
- *
- * @see at.gv.egovernment.moa.id.process.springweb.MoaIdTask#execute(at.gv.
- * egovernment.moa.id.process.api.ExecutionContext,
- * javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
+ /**
+ * Constructor.
+ * @param handlers List of countrySpecificSearchProcessors
+ * @param ernpClient Ernp client
+ * @param zmrClient ZMR client
*/
+ public InitialSearchTask(List<CountrySpecificDetailSearchProcessor> handlers, IErnpClient ernpClient,
+ IZmrClient zmrClient) {
+ this.ernpClient = ernpClient;
+ this.zmrClient = zmrClient;
+ this.handlers = handlers;
+ log.info("# " + handlers.size() + " country specific detail search services are registered");
+ }
+
@Override
public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)
throws TaskExecutionException {
@@ -92,7 +92,6 @@ public class InitialSearchTask extends AbstractAuthServletTask {
final ILightResponse eidasResponse = authProcessData
.getGenericDataFromSession(Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class);
- // post-process eIDAS attributes
final SimpleEidasData eidData = convertSimpleMapToSimpleData(convertEidasAttrToSimpleMap(
eidasResponse.getAttributes().getAttributeMap()));
@@ -105,10 +104,11 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
private String step2RegisterSearchWithPersonidentifier(SimpleEidasData eidData) throws TaskExecutionException {
+ log.trace("Starting step2RegisterSearchWithPersonidentifier");
String personIdentifier = eidData.getPseudonym();
MergedRegisterSearchResult result = searchInZmrAndErnp(personIdentifier);
if (result.getResultCount() == 0) {
- return step5CheckCountrySpecificSearchPossible(result, eidData);
+ return step5CheckAndPerformCountrySpecificSearchIfPossible(result, eidData);
} else if (result.getResultCount() == 1) {
return step3CheckRegisterUpdateNecessary(result, eidData);
}
@@ -116,46 +116,9 @@ public class InitialSearchTask extends AbstractAuthServletTask {
new ManualFixNecessaryException(personIdentifier));
}
- private SimpleEidasData convertSimpleMapToSimpleData(Map<String, Object> eidasAttrMap)
- throws EidasAttributeException, EidPostProcessingException {
- SimpleEidasData simpleEidasData = new SimpleEidasData();
-
- final Object eIdentifierObj = eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
- final Triple<String, String, String> eIdentifier =
- EidasResponseUtils.parseEidasPersonalIdentifier((String) eIdentifierObj);
- simpleEidasData.setCitizenCountryCode(eIdentifier.getFirst());
-
- // MDS attributes
- simpleEidasData.setPseudonym(EidasResponseUtils.processPseudonym(
- eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)));
- simpleEidasData.setFamilyName(EidasResponseUtils.processFamilyName(
- eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTFAMILYNAME)));
- simpleEidasData.setGivenName(EidasResponseUtils.processGivenName(
- eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTGIVENNAME)));
- simpleEidasData.setDateOfBirth(EidasResponseUtils.processDateOfBirthToString(
- eidasAttrMap.get(Constants.eIDAS_ATTR_DATEOFBIRTH)));
-
- // additional attributes
- simpleEidasData.setPlaceOfBirth(EidasResponseUtils.processPlaceOfBirth(
- eidasAttrMap.get(Constants.eIDAS_ATTR_PLACEOFBIRTH)));
- simpleEidasData.setBirthName(EidasResponseUtils.processBirthName(
- eidasAttrMap.get(Constants.eIDAS_ATTR_BIRTHNAME)));
- simpleEidasData.setAddress(EidasResponseUtils.processAddress(
- eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTADDRESS)));
-
- if (eidasAttrMap.containsKey(Constants.eIDAS_ATTR_TAXREFERENCE)) {
- simpleEidasData.setTaxNumber(EidasResponseUtils.processTaxReference(
- eidasAttrMap.get(Constants.eIDAS_ATTR_TAXREFERENCE)));
- }
-
- //TODO other additional attributes
- return simpleEidasData;
- }
-
private String step3CheckRegisterUpdateNecessary(MergedRegisterSearchResult result, SimpleEidasData eidData)
throws TaskExecutionException {
- //check if data from eidas authentication matches with data from register
- log.debug("Compare " + result + " with " + eidData);
+ log.trace("Starting step3CheckRegisterUpdateNecessary");
try {
if (eidData.equalsRegisterData(result)) {
//No update necessary, just return bpk
@@ -170,18 +133,19 @@ public class InitialSearchTask extends AbstractAuthServletTask {
private String step4UpdateRegisterData(MergedRegisterSearchResult result,
SimpleEidasData eidData) throws WorkflowException {
+ log.trace("Starting step4UpdateRegisterData");
log.debug("Update " + result + " with " + eidData);
//TODO wann rechtlich möglich?
return result.getBpk();
}
- private String step5CheckCountrySpecificSearchPossible(MergedRegisterSearchResult result, SimpleEidasData eidData)
- throws TaskExecutionException {
+ private String step5CheckAndPerformCountrySpecificSearchIfPossible(
+ MergedRegisterSearchResult result, SimpleEidasData eidData) throws TaskExecutionException {
+ log.trace("Starting step5CheckAndPerformCountrySpecificSearchIfPossible");
String citizenCountry = eidData.getCitizenCountryCode();
- ICountrySpecificDetailSearchProcessor foundHandler = null;
- for (final ICountrySpecificDetailSearchProcessor el : handlers) {
- //5 check if country specific search is possible
+ CountrySpecificDetailSearchProcessor foundHandler = null;
+ for (final CountrySpecificDetailSearchProcessor el : handlers) {
if (el.canHandle(citizenCountry, eidData)) {
log.debug("Found suitable country specific search handler for " + citizenCountry
+ " by using: " + el.getName());
@@ -190,18 +154,16 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
}
if (foundHandler == null) {
- //MDS search
return step8RegisterSearchWithMds(result, eidData);
} else {
- //country specific search
return step6CountrySpecificSearch(foundHandler, result, eidData);
}
}
- private String step6CountrySpecificSearch(ICountrySpecificDetailSearchProcessor countrySpecificDetailSearchProcessor,
+ private String step6CountrySpecificSearch(CountrySpecificDetailSearchProcessor countrySpecificDetailSearchProcessor,
MergedRegisterSearchResult initialSearchResult, SimpleEidasData eidData)
throws TaskExecutionException {
- //6 country specific search
+ log.trace("Starting step6CountrySpecificSearch");
MergedRegisterSearchResult countrySpecificDetailSearchResult =
countrySpecificDetailSearchProcessor.search(eidData);
@@ -210,7 +172,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {
return step8RegisterSearchWithMds(initialSearchResult, eidData);
case 1:
return step7aKittProcess(initialSearchResult, countrySpecificDetailSearchResult, eidData);
- default://should not happen
+ default:
throw new TaskExecutionException(pendingReq, "Detail search - Kitt Process necessary.",
new ManualFixNecessaryException(eidData));
}
@@ -219,8 +181,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {
private String step7aKittProcess(MergedRegisterSearchResult initialSearchResult,
MergedRegisterSearchResult countrySpecificDetailSearchResult,
SimpleEidasData eidData) throws TaskExecutionException {
- //Automerge data
- log.debug("Automerge " + initialSearchResult + " with " + eidData + " " + countrySpecificDetailSearchResult);
+ log.trace("Starting step7aKittProcess");
try {
if (initialSearchResult.getResultCount() != 0) {
throw new WorkflowException("initialSearchResult.getResultCount() != 0");
@@ -229,14 +190,11 @@ public class InitialSearchTask extends AbstractAuthServletTask {
throw new WorkflowException("countrySpecificDetailSearchResult.getResultCount() != 1");
}
if (countrySpecificDetailSearchResult.getResultsZmr().size() == 1) {
- //update ZMR
zmrClient.update(countrySpecificDetailSearchResult.getResultsZmr().get(0), eidData);
}
- if (countrySpecificDetailSearchResult.getResultsErnb().size() == 1) {
- //update ErnB
- ernbClient.update(countrySpecificDetailSearchResult.getResultsErnb().get(0), eidData);
+ if (countrySpecificDetailSearchResult.getResultsErnp().size() == 1) {
+ ernpClient.update(countrySpecificDetailSearchResult.getResultsErnp().get(0), eidData);
}
-
String bpK = countrySpecificDetailSearchResult.getBpk();
return bpK;
} catch (WorkflowException e) {
@@ -246,16 +204,14 @@ public class InitialSearchTask extends AbstractAuthServletTask {
private String step8RegisterSearchWithMds(MergedRegisterSearchResult initialSearchResult,
SimpleEidasData eidData) {
- MergedRegisterSearchResult mdsSearchResult = new MergedRegisterSearchResult();
-
- ArrayList<RegisterResult> resultsZmr =
+ log.trace("Starting step8RegisterSearchWithMds");
+ List<RegisterResult> resultsZmr =
zmrClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getDateOfBirth());
- mdsSearchResult.setResultsZmr(resultsZmr);
- ArrayList<RegisterResult> resultsErnb =
- ernbClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getDateOfBirth());
- mdsSearchResult.setResultsErnb(resultsErnb);
+ List<RegisterResult> resultsErnp =
+ ernpClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getDateOfBirth());
+ MergedRegisterSearchResult mdsSearchResult = new MergedRegisterSearchResult(resultsZmr, resultsErnp);
if (mdsSearchResult.getResultCount() == 0) {
executionContext.put("TASK_CreateNewErnpEntryTask", true);
} else {
@@ -267,17 +223,48 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
private MergedRegisterSearchResult searchInZmrAndErnp(String personIdentifier) {
- MergedRegisterSearchResult initialSearchResult = new MergedRegisterSearchResult();
+ List<RegisterResult> resultsZmr = zmrClient.searchWithPersonIdentifier(personIdentifier);
+ List<RegisterResult> resultsErnp = ernpClient.searchWithPersonIdentifier(personIdentifier);
+ return new MergedRegisterSearchResult(resultsZmr, resultsErnp);
+ }
+
+ private SimpleEidasData convertSimpleMapToSimpleData(Map<String, Object> eidasAttrMap)
+ throws EidasAttributeException {
+ SimpleEidasData simpleEidasData = new SimpleEidasData();
+
+ final Object eIdentifierObj = eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER);
+ final Triple<String, String, String> eIdentifier =
+ EidasResponseUtils.parseEidasPersonalIdentifier((String) eIdentifierObj);
+ if (eIdentifier == null) {
+ throw new EidasAttributeException("Error processing eIdentifier");
+ }
+ simpleEidasData.setCitizenCountryCode(eIdentifier.getFirst());
+
+ // MDS attributes
+ simpleEidasData.setPseudonym(EidasResponseUtils.processPseudonym(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_PERSONALIDENTIFIER)));
+ simpleEidasData.setFamilyName(EidasResponseUtils.processFamilyName(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTFAMILYNAME)));
+ simpleEidasData.setGivenName(EidasResponseUtils.processGivenName(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTGIVENNAME)));
+ simpleEidasData.setDateOfBirth(EidasResponseUtils.processDateOfBirthToString(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_DATEOFBIRTH)));
- ArrayList<RegisterResult> resultsZmr =
- zmrClient.searchWithPersonIdentifer(personIdentifier);
- initialSearchResult.setResultsZmr(resultsZmr);
+ // additional attributes
+ simpleEidasData.setPlaceOfBirth(EidasResponseUtils.processPlaceOfBirth(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_PLACEOFBIRTH)));
+ simpleEidasData.setBirthName(EidasResponseUtils.processBirthName(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_BIRTHNAME)));
+ simpleEidasData.setAddress(EidasResponseUtils.processAddress(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_CURRENTADDRESS)));
- ArrayList<RegisterResult> resultsErnb =
- ernbClient.searchWithPersonIdentifer(personIdentifier);
- initialSearchResult.setResultsErnb(resultsErnb);
+ if (eidasAttrMap.containsKey(Constants.eIDAS_ATTR_TAXREFERENCE)) {
+ simpleEidasData.setTaxNumber(EidasResponseUtils.processTaxReference(
+ eidasAttrMap.get(Constants.eIDAS_ATTR_TAXREFERENCE)));
+ }
- return initialSearchResult;
+ //TODO other additional attributes
+ return simpleEidasData;
}
private Map<String, Object> convertEidasAttrToSimpleMap(
@@ -296,7 +283,6 @@ public class InitialSearchTask extends AbstractAuthServletTask {
} else {
log.info("Ignore empty 'DateTime' attribute");
}
-
} else if (PostalAddress.class.equals(parameterizedType)) {
final PostalAddress addressAttribute = EidasResponseUtils
.translateAddressAttribute(el, attributeMap.get(el).asList());
@@ -307,7 +293,6 @@ public class InitialSearchTask extends AbstractAuthServletTask {
} else {
log.info("Ignore empty 'PostalAddress' attribute");
}
-
} else {
final List<String> natPersonIdObj = EidasResponseUtils
.translateStringListAttribute(el, attributeMap.get(el).asList());
@@ -315,7 +300,6 @@ public class InitialSearchTask extends AbstractAuthServletTask {
if (StringUtils.isNotEmpty(stringAttr)) {
result.put(el.getFriendlyName(), stringAttr);
log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + stringAttr);
-
} else {
log.info("Ignore empty 'String' attribute");
}
@@ -324,18 +308,4 @@ public class InitialSearchTask extends AbstractAuthServletTask {
log.debug("Receive #" + result.size() + " attributes with names: " + result.keySet().toString());
return result;
}
-
- /**
- * Constructor.
- * @param handlers List of countrySpecificSearchProcessors
- * @param ernbClient Ernb client
- * @param zmrClient ZMR client
- */
- public InitialSearchTask(List<ICountrySpecificDetailSearchProcessor> handlers, IErnbClient ernbClient,
- IZmrClient zmrClient) {
- this.ernbClient = ernbClient;
- this.zmrClient = zmrClient;
- this.handlers = handlers;
- log.info("# " + handlers.size() + " country specific detail search services are registered");
- }
}