diff options
| author | Thomas <> | 2022-03-03 11:42:53 +0100 | 
|---|---|---|
| committer | Thomas <> | 2022-03-03 11:42:53 +0100 | 
| commit | df894a4076abbcb4357509eb453f4c447a8856d5 (patch) | |
| tree | 7ea2ea66b3b2420ff1502ec96bf344d50d5ae131 /eidas_modules/authmodule-eIDAS-v2/src | |
| parent | be411ba3e668eb86f87c0d8a021989d97b63c7a3 (diff) | |
| download | National_eIDAS_Gateway-df894a4076abbcb4357509eb453f4c447a8856d5.tar.gz National_eIDAS_Gateway-df894a4076abbcb4357509eb453f4c447a8856d5.tar.bz2 National_eIDAS_Gateway-df894a4076abbcb4357509eb453f4c447a8856d5.zip | |
chore(ernp): optimize ERnP client based on results from integration test
Diffstat (limited to 'eidas_modules/authmodule-eIDAS-v2/src')
| -rw-r--r-- | eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/clients/ernp/ErnpRestClient.java | 74 | 
1 files changed, 38 insertions, 36 deletions
| 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<String> 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());        } | 
