From df894a4076abbcb4357509eb453f4c447a8856d5 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Thu, 3 Mar 2022 11:42:53 +0100
Subject: chore(ernp): optimize ERnP client based on results from integration
test
---
eidas_modules/authmodule-eIDAS-v2/pom.xml | 3 -
.../auth/eidas/v2/clients/ernp/ErnpRestClient.java | 74 +++++++++++-----------
2 files changed, 38 insertions(+), 39 deletions(-)
(limited to 'eidas_modules')
diff --git a/eidas_modules/authmodule-eIDAS-v2/pom.xml b/eidas_modules/authmodule-eIDAS-v2/pom.xml
index a3d855bd..5f7edef0 100644
--- a/eidas_modules/authmodule-eIDAS-v2/pom.xml
+++ b/eidas_modules/authmodule-eIDAS-v2/pom.xml
@@ -137,12 +137,9 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
-
com.fasterxml.jackson.core
jackson-databind
- 2.11.2
- compile
org.openapitools
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java
index 45a4010b..66fec9dc 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java
@@ -17,6 +17,7 @@ import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.HttpClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +35,8 @@ import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.RegisterResult;
@@ -43,6 +46,7 @@ import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.api.DefaultApi;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.invoker.ApiClient;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Aendern;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.AendernResponse;
+import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Anlegen;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.AnlegenResponse;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.Eidas;
import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ernp.model.PartialDate;
@@ -206,37 +210,39 @@ public class ErnpRestClient implements IErnpClient {
throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
}
}
-
+
@Override
public ErnpRegisterResult searchCountrySpecific(PersonSuchenRequest personSearchDao,
String citizenCountryCode) throws EidasSAuthenticationException {
- try {
+ String countrySearchMsg = MessageFormat.format(PROCESS_SEARCH_COUNTRY_SPECIFIC, citizenCountryCode);
+
+ try {
// build generic request metadata
final GenericRequestParams generic = buildGenericRequestParameters("stepCC");
// build search request
final PersonSuchen personSuchen = new PersonSuchen();
personSuchen.setSuchoptionen(generateSearchParameters());
- personSuchen.setBegruendung(PROCESS_SEARCH_COUNTRY_SPECIFIC);
+ personSuchen.setBegruendung(countrySearchMsg);
personSuchen.setSuchdaten(mapCountrySpecificSearchData(personSearchDao));
// request ERnP
- log.trace("Requesting ERnP for '{}' operation", PROCESS_SEARCH_COUNTRY_SPECIFIC);
+ log.trace("Requesting ERnP for '{}' operation", countrySearchMsg);
final SuchenResponse resp = ernpClient.suchen(generic.getClientBehkz(), generic.clientName,
generic.getClientRequestTime(), generic.getClientRequestId(), personSuchen);
// parse ZMR response
- return processErnpResponse(resp, citizenCountryCode, false, PROCESS_SEARCH_COUNTRY_SPECIFIC);
+ return processErnpResponse(resp, citizenCountryCode, false, countrySearchMsg);
} catch (RestClientException e) {
- log.warn(LOGMSG_ERNP_ERROR, PROCESS_SEARCH_COUNTRY_SPECIFIC, e.getMessage());
+ log.warn(LOGMSG_ERNP_ERROR, countrySearchMsg, e.getMessage());
throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
} catch (final EidasSAuthenticationException e) {
throw e;
} catch (final Exception e) {
- log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_SEARCH_COUNTRY_SPECIFIC, e.getMessage());
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, countrySearchMsg, e.getMessage());
throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
}
@@ -268,14 +274,14 @@ public class ErnpRestClient implements IErnpClient {
}
} catch (RestClientException e) {
- log.warn(LOGMSG_ERNP_ERROR, PROCESS_SEARCH_COUNTRY_SPECIFIC, e.getMessage());
+ log.warn(LOGMSG_ERNP_ERROR, PROCESS_KITT_GENERAL, e.getMessage());
throw new EidasSAuthenticationException(ERROR_MATCHING_11, new Object[] { e.getMessage() }, e);
} catch (final EidasSAuthenticationException e) {
throw e;
} catch (final Exception e) {
- log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_SEARCH_COUNTRY_SPECIFIC, e.getMessage());
+ log.warn(LOGMSG_ERNP_RESP_PROCESS, PROCESS_KITT_GENERAL, e.getMessage());
throw new EidasSAuthenticationException(ERROR_MATCHING_99, new Object[] { e.getMessage() }, e);
}
@@ -454,7 +460,12 @@ public class ErnpRestClient implements IErnpClient {
ernpReq.setVersion(ernpPersonToKitt.getVersion());
// add new eIDAS attributes
- eidasDocumentToAdd.stream().forEach(el -> ernpReq.getAnlegen().addEidasItem(el));
+ if (!eidasDocumentToAdd.isEmpty()) {
+ log.debug("Find eIDAS Documents to update. Injection update entries into ERnP request ... ");
+ ernpReq.setAnlegen(new Anlegen());
+ eidasDocumentToAdd.stream().forEach(el -> ernpReq.getAnlegen().addEidasItem(el));
+
+ }
// update MDS if required
if (mdsToUpdate != null) {
@@ -545,10 +556,11 @@ public class ErnpRestClient implements IErnpClient {
// build search request
final Suchdaten searchInfos = new Suchdaten();
+ searchInfos.setBpkZp(registerResult.getBpk());
searchInfos.setFamilienname(registerResult.getFamilyName());
searchInfos.setVorname(registerResult.getGivenName());
- searchInfos.setGeburtsdatum(buildErnpBirthday(registerResult.getDateOfBirth()));
-
+ searchInfos.setGeburtsdatum(buildErnpBirthday(registerResult.getDateOfBirth()));
+
final PersonSuchen personSuchen = new PersonSuchen();
personSuchen.setSuchoptionen(generateSearchParameters());
personSuchen.setBegruendung(PROCESS_KITT_IDENITIES_GET);
@@ -600,28 +612,16 @@ public class ErnpRestClient implements IErnpClient {
private SimpleEidasData selectMdsInformationToUpdate(Person ernpPersonToKitt, SimpleEidasData eidData) {
PersonendatenErgebnis person = ernpPersonToKitt.getPersonendaten();
- SimpleEidasDataBuilder builder = SimpleEidasData.builder();
+ SimpleEidasDataBuilder builder = SimpleEidasData.builder()
+ .givenName(eidData.getGivenName())
+ .familyName(eidData.getFamilyName())
+ .dateOfBirth(eidData.getDateOfBirth());
- boolean findMismatch = false;
- if (!person.getVorname().equals(eidData.getGivenName())) {
- findMismatch = true;
- builder.givenName(eidData.getGivenName());
-
- }
-
- if (!person.getFamilienname().equals(eidData.getFamilyName())) {
- findMismatch = true;
- builder.familyName(eidData.getFamilyName());
-
- }
-
- if (!getTextualBirthday(person.getGeburtsdatum()).equals(eidData.getDateOfBirth())) {
- findMismatch = true;
- builder.dateOfBirth(eidData.getDateOfBirth());
-
- }
+ boolean findMatch = person.getVorname().equals(eidData.getGivenName())
+ && person.getFamilienname().equals(eidData.getFamilyName())
+ && getTextualBirthday(person.getGeburtsdatum()).equals(eidData.getDateOfBirth());
+ return findMatch ? null : builder.build();
- return findMismatch ? builder.build() : null;
}
private Aendern generateMdsChangeRequest(Person ernpPersonToKitt, SimpleEidasData mdsToUpdate) {
@@ -771,8 +771,10 @@ public class ErnpRestClient implements IErnpClient {
private HttpMessageConverter> buildCustomJacksonObjectMapper() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
- converter.getObjectMapper()
- .setSerializationInclusion(Include.NON_NULL);
+ converter.getObjectMapper().setSerializationInclusion(Include.NON_NULL);
+
+ converter.getObjectMapper().registerModule(new JavaTimeModule());
+ converter.getObjectMapper().configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return converter;
}
@@ -793,9 +795,9 @@ public class ErnpRestClient implements IErnpClient {
// TODO: opimize errorHandling based on response info's from real ERnP
List serverId = response.getHeaders().getOrEmpty(ERNP_RESPONSE_HEADER_SERVER_ID);
- log.warn("Receive http-error: {} from ERnP with serverTransactionId",
+ log.warn("Receive http-error: {} from ERnP with serverTransactionId {}",
response.getRawStatusCode(), serverId.isEmpty() ? "'not set'" : serverId.get(0));
-
+ log.warn(" Full ERnP response-body: {}", IOUtils.toString(response.getBody(), "UTF-8"));
throw new ErnpRestCommunicationException(response.getRawStatusCode());
}
--
cgit v1.2.3