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.java147
1 files changed, 113 insertions, 34 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 d9f70a81..6f4cfefc 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
@@ -25,14 +25,19 @@ package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.CountrySpecificDetailSearchResult;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.InitialSearchResult;
+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.exception.EidasAttributeException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.exception.ManualFixNecessaryException;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.handler.ICountrySpecificDetailSearchProcessor;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.ICcSpecificEidProcessingService;
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;
import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper;
import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;
import com.google.common.collect.ImmutableMap;
@@ -75,13 +80,19 @@ public class InitialSearchTask extends AbstractAuthServletTask {
// private IConfiguration basicConfig;
// @Autowired
// private SzrClient szrClient;
- @Autowired
- private ICcSpecificEidProcessingService eidPostProcessor;
+ // @Autowired
+ // private ICcSpecificEidProcessingService eidPostProcessor;
// private static final String EID_STATUS = "urn:eidgvat:eid.status.eidas";
@Autowired
private ApplicationContext context;
+ @Autowired
+ private IErnbClient ernbClient;
+
+ @Autowired
+ private IZmrClient zmrClient;
+
@PostConstruct
private void initialize() {
log.debug("Initialize country specific detail search services ... ");
@@ -127,36 +138,82 @@ public class InitialSearchTask extends AbstractAuthServletTask {
eidasResponse.getAttributes().getAttributeMap());
// post-process eIDAS attributes
- final ErnbEidData eidData = eidPostProcessor.postProcess(simpleAttrMap);
-
- String personIdentifier = eidData.getPseudonym();
-
- //search in register(step 2)
- InitialSearchResult result = searchInZmrAndErnp(personIdentifier);
- switch (result.getResultCount()) {
- case 0:
- step5(result, eidData);
- break;
- case 1:
- step3(result, eidData);
- break;
- default://should not happen
- throw new TaskExecutionException(pendingReq, "Initial search - Kitt Process necessary.",
- new ManualFixNecessaryException(personIdentifier));
- }
+ final SimpleEidasData eidData = convertSimpleMapToSimpleData(simpleAttrMap);
+ step2(eidData);
} catch (final Exception e) {
log.error("Initial search FAILED.", e);
throw new TaskExecutionException(pendingReq, "Initial search FAILED.", e);
}
}
- private void step3(InitialSearchResult result, ErnbEidData eidData) {
+ private void step2(SimpleEidasData eidData) throws TaskExecutionException {
+ String personIdentifier = eidData.getPseudonym();
+ //search in register(step 2)
+ MergedRegisterSearchResult result = searchInZmrAndErnp(personIdentifier);
+ switch (result.getResultCount()) {
+ case 0:
+ step5(result, eidData);
+ break;
+ case 1:
+ step3(result, eidData);
+ break;
+ default://should not happen
+ throw new TaskExecutionException(pendingReq, "Initial search - Kitt Process necessary.",
+ 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.processDateOfBirth(
+ 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)));
+
+ //TODO other additional attributes
+ return simpleEidasData;
+ }
+
+ private void step3(MergedRegisterSearchResult result, SimpleEidasData eidData) {
//check if data from eidas authentication matches with data from register
- //TODO
+ log.debug("Compare " + result + " with " + eidData);
+ //TODO check if data matches
+ boolean match = true;
+ if (match) {
+ return;
+ } else {
+ step4(result, eidData);
+ }
}
- private void step5(InitialSearchResult result, ErnbEidData eidData) throws TaskExecutionException {
+ private void step4(MergedRegisterSearchResult result, SimpleEidasData eidData) {
+ log.debug("Update " + result + " with " + eidData);
+ //TODO
+ }
+
+ private void step5(MergedRegisterSearchResult result, SimpleEidasData eidData)
+ throws TaskExecutionException {
String citizenCountry = eidData.getCitizenCountryCode();
ICountrySpecificDetailSearchProcessor foundHandler = null;
for (final ICountrySpecificDetailSearchProcessor el : handlers) {
@@ -178,7 +235,8 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
private void step6(ICountrySpecificDetailSearchProcessor countrySpecificDetailSearchProcessor,
- InitialSearchResult initialSearchResult, ErnbEidData eidData) throws TaskExecutionException {
+ MergedRegisterSearchResult initialSearchResult, SimpleEidasData eidData)
+ throws TaskExecutionException {
//6 country specific search
CountrySpecificDetailSearchResult countrySpecificDetailSearchResult =
countrySpecificDetailSearchProcessor.search(eidData);
@@ -196,19 +254,40 @@ public class InitialSearchTask extends AbstractAuthServletTask {
}
}
- private void step7a(InitialSearchResult initialSearchResult,
- CountrySpecificDetailSearchResult countrySpecificDetailSearchResult, ErnbEidData eidData) {
+ private void step7a(MergedRegisterSearchResult initialSearchResult,
+ CountrySpecificDetailSearchResult countrySpecificDetailSearchResult, SimpleEidasData eidData) {
//TODO automerge
-
+ log.debug("Automerge " + initialSearchResult + " with " + eidData + " " + countrySpecificDetailSearchResult);
}
- private void step8(InitialSearchResult initialSearchResult, ErnbEidData eidData) {
- //TODO MDS Suche
+ private void step8(MergedRegisterSearchResult initialSearchResult, SimpleEidasData eidData) {
+ MergedRegisterSearchResult mdsSearchResult = new MergedRegisterSearchResult();
+
+ ArrayList<RegisterResult> resultsZmr =
+ zmrClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getFormatedDateOfBirth());
+ mdsSearchResult.setResultsZmr(resultsZmr);
+
+ ArrayList<RegisterResult> resultsErnb =
+ ernbClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getFormatedDateOfBirth());
+ mdsSearchResult.setResultsErnb(resultsErnb);
+
+ log.debug("Automerge " + initialSearchResult + " with " + eidData + " " + mdsSearchResult);
+ //TODO
+
}
- private InitialSearchResult searchInZmrAndErnp(String personIdentifier) {
- //search TODO
- return new InitialSearchResult();//TODO
+ private MergedRegisterSearchResult searchInZmrAndErnp(String personIdentifier) {
+ MergedRegisterSearchResult initialSearchResult = new MergedRegisterSearchResult();
+
+ ArrayList<RegisterResult> resultsZmr =
+ zmrClient.searchWithPersonIdentifer(personIdentifier);
+ initialSearchResult.setResultsZmr(resultsZmr);
+
+ ArrayList<RegisterResult> resultsErnb =
+ ernbClient.searchWithPersonIdentifer(personIdentifier);
+ initialSearchResult.setResultsErnb(resultsErnb);
+
+ return initialSearchResult;
}
private Map<String, Object> convertEidasAttrToSimpleMap(