diff options
25 files changed, 293 insertions, 215 deletions
| diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df21e049..f408b1df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,7 +20,7 @@ include:  default:    tags: -    - docker +    - docker    stages:    - assemble diff --git a/build_reporting/pom.xml b/build_reporting/pom.xml index c6bd080e..ef3f735f 100644 --- a/build_reporting/pom.xml +++ b/build_reporting/pom.xml @@ -6,7 +6,7 @@    <parent>      <groupId>at.asitplus.eidas</groupId>      <artifactId>ms_specific</artifactId> -    <version>1.2.3</version> +    <version>1.2.4-SNAPSHOT</version>    </parent>    <artifactId>build_reporting</artifactId>    <packaging>pom</packaging> diff --git a/connector/pom.xml b/connector/pom.xml index f386c08f..dff75c08 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -6,7 +6,7 @@    <parent>      <groupId>at.asitplus.eidas</groupId>      <artifactId>ms_specific</artifactId> -    <version>1.2.3</version> +    <version>1.2.4-SNAPSHOT</version>    </parent>    <groupId>at.asitplus.eidas.ms_specific</groupId> @@ -33,6 +33,16 @@      <dependency>        <groupId>at.gv.egiz.eaaf</groupId>        <artifactId>eaaf_module_pvp2_idp</artifactId> +      <exclusions> +        <exclusion> +          <groupId>org.bouncycastle</groupId> +          <artifactId>bcpkix-jdk15on</artifactId> +        </exclusion> +        <exclusion> +          <groupId>org.bouncycastle</groupId> +          <artifactId>bcprov-jdk15on</artifactId> +        </exclusion> +      </exclusions>      </dependency>      <dependency>        <groupId>at.asitplus.eidas.ms_specific</groupId> @@ -88,6 +98,10 @@        <artifactId>slf4j-api</artifactId>      </dependency>      <dependency> +      <groupId>org.apache.logging.log4j</groupId> +      <artifactId>log4j-to-slf4j</artifactId> +    </dependency> +    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-collections4</artifactId>      </dependency> diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java index 881eeb8a..e4c68004 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java @@ -53,6 +53,7 @@ import at.gv.egiz.eaaf.core.exceptions.AuthnRequestValidatorException;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;  import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl; +import at.gv.egiz.eaaf.core.impl.utils.TransactionIdUtils;  import at.gv.egiz.eaaf.modules.pvp2.api.reqattr.EaafRequestedAttribute;  import at.gv.egiz.eaaf.modules.pvp2.api.reqattr.EaafRequestedAttributes;  import at.gv.egiz.eaaf.modules.pvp2.api.validation.IAuthnRequestPostProcessor; @@ -211,7 +212,11 @@ public class AuthnRequestValidator implements IAuthnRequestPostProcessor {      } else {        if (el.getAttributeValues() != null && el.getAttributeValues().size() == 1) {          final String transactionId = el.getAttributeValues().get(0).getDOM().getTextContent(); -        ((RequestImpl) pendingReq).setUniqueTransactionIdentifier(transactionId); +        ((RequestImpl) pendingReq).setUniqueTransactionIdentifier(transactionId);         +        log.info("Find transactionId: {} from requesting service. Replace old id: {} ", +            transactionId, TransactionIdUtils.getTransactionId());         +        TransactionIdUtils.setTransactionId(transactionId); +                  return true;        } else { diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml index ec16a7d2..a417a0e5 100644 --- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml +++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml @@ -89,7 +89,8 @@          class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />    <bean id="mvcGUIBuilderImpl" -        class="at.asitplus.eidas.specific.connector.gui.SpringMvcGuiFormBuilderImpl" /> +        class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" /> +    <bean id="StatusMessageProvider"          class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" /> diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java index 4e66d324..893ab4cb 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/FullStartUpAndProcessTest.java @@ -9,6 +9,7 @@ import java.io.UnsupportedEncodingException;  import java.lang.reflect.Field;  import java.math.BigInteger;  import java.net.URISyntaxException; +import java.time.Instant;  import java.util.Map;  import java.util.Timer; @@ -16,7 +17,6 @@ import javax.xml.transform.TransformerException;  import org.apache.commons.lang3.RandomStringUtils;  import org.apache.ignite.Ignition; -import org.joda.time.DateTime;  import org.junit.AfterClass;  import org.junit.Assert;  import org.junit.Before; @@ -57,6 +57,7 @@ import at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalContro  import at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint;  import at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider;  import at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider; +import at.asitplus.eidas.specific.connector.test.saml2.Pvp2SProfileEndPointTest;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.EidasSignalServlet;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.EidasAttributeRegistry; @@ -540,10 +541,10 @@ public class FullStartUpAndProcessTest {        IOException, MarshallingException, ComponentInitializationException {      final RequestAbstractType authnReq = (RequestAbstractType) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(), -        FullStartUpAndProcessTest.class.getResourceAsStream("/data/pvp2_authn_1.xml")); -    authnReq.setIssueInstant(DateTime.now()); -    RequestAbstractType signedAuthnReq = -        Saml2Utils.signSamlObject(authnReq, credentialProvider.getMessageSigningCredential(), true); +        Pvp2SProfileEndPointTest.class.getResourceAsStream("/data/pvp2_authn_1.xml")); +    authnReq.setIssueInstant(Instant.now());     +    RequestAbstractType signedAuthnReq =  +        Saml2Utils.signSamlObject(authnReq, credentialProvider.getMessageSigningCredential(), true);                 String b64 = Base64Utils.encodeToString(DomUtils.serializeNode(            XMLObjectSupport.getMarshaller(signedAuthnReq).marshall(signedAuthnReq)).getBytes("UTF-8"));      saml2Req.setParameter("SAMLRequest", b64); diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java index bcba3e11..6b39bd76 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java @@ -6,12 +6,12 @@ import java.io.UnsupportedEncodingException;  import java.security.cert.CertificateException;  import java.security.cert.CertificateFactory;  import java.security.cert.X509Certificate; +import java.time.Instant;  import java.util.List;  import java.util.Timer;  import javax.xml.transform.TransformerException; -import org.joda.time.DateTime;  import org.junit.Assert;  import org.junit.Before;  import org.junit.BeforeClass; @@ -129,7 +129,7 @@ public class Pvp2SProfileEndPointTest {      final RequestAbstractType authnReq = (RequestAbstractType) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(),          Pvp2SProfileEndPointTest.class.getResourceAsStream("/data/pvp2_authn_3.xml")); -    authnReq.setIssueInstant(DateTime.now());     +    authnReq.setIssueInstant(Instant.now());          RequestAbstractType signedAuthnReq =           Saml2Utils.signSamlObject(authnReq, credentialProvider.getMetaDataSigningCredential(), true);                 String b64 = Base64Utils.encodeToString(DomUtils.serializeNode( @@ -166,7 +166,7 @@ public class Pvp2SProfileEndPointTest {      final RequestAbstractType authnReq = (RequestAbstractType) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(),          Pvp2SProfileEndPointTest.class.getResourceAsStream("/data/pvp2_authn_1.xml")); -    authnReq.setIssueInstant(DateTime.now());     +    authnReq.setIssueInstant(Instant.now());          RequestAbstractType signedAuthnReq =           Saml2Utils.signSamlObject(authnReq, credentialProvider.getMetaDataSigningCredential(), true);                 String b64 = Base64Utils.encodeToString(DomUtils.serializeNode( @@ -203,7 +203,7 @@ public class Pvp2SProfileEndPointTest {      final RequestAbstractType authnReq = (RequestAbstractType) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(),          Pvp2SProfileEndPointTest.class.getResourceAsStream("/data/pvp2_authn_1.xml")); -    authnReq.setIssueInstant(DateTime.now());     +    authnReq.setIssueInstant(Instant.now());          RequestAbstractType signedAuthnReq =           Saml2Utils.signSamlObject(authnReq, credentialProvider.getMetaDataSigningCredential(), true);                 String b64 = Base64Utils.encodeToString(DomUtils.serializeNode( @@ -240,7 +240,7 @@ public class Pvp2SProfileEndPointTest {      final RequestAbstractType authnReq = (RequestAbstractType) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(),          Pvp2SProfileEndPointTest.class.getResourceAsStream("/data/pvp2_authn_1.xml")); -    authnReq.setIssueInstant(DateTime.now());     +    authnReq.setIssueInstant(Instant.now());          RequestAbstractType signedAuthnReq =           Saml2Utils.signSamlObject(authnReq, credentialProvider.getMessageSigningCredential(), true);                 String b64 = Base64Utils.encodeToString(DomUtils.serializeNode( diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml index 81fff7dd..0645ed31 100644 --- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml +++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml @@ -89,7 +89,7 @@      class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />    <bean id="mvcGUIBuilderImpl" -    class="at.asitplus.eidas.specific.connector.gui.SpringMvcGuiFormBuilderImpl" /> +    class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />    <bean id="templateEngine"      class="org.thymeleaf.spring5.SpringTemplateEngine"> diff --git a/connector_lib/pom.xml b/connector_lib/pom.xml index a0915fb5..9584458e 100644 --- a/connector_lib/pom.xml +++ b/connector_lib/pom.xml @@ -7,7 +7,7 @@    <parent>      <groupId>at.asitplus.eidas</groupId>      <artifactId>ms_specific</artifactId> -    <version>1.2.3</version> +    <version>1.2.4-SNAPSHOT</version>    </parent>    <groupId>at.asitplus.eidas.ms_specific</groupId>    <artifactId>connector_lib</artifactId> diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/DefaultVelocityGuiBuilderImpl.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/DefaultVelocityGuiBuilderImpl.java index e7ebc92f..2283081e 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/DefaultVelocityGuiBuilderImpl.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/DefaultVelocityGuiBuilderImpl.java @@ -25,10 +25,14 @@ package at.asitplus.eidas.specific.connector.gui;  import java.io.InputStream; +import javax.servlet.http.HttpServletRequest; +  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType;  import org.springframework.stereotype.Service; +import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration;  import at.gv.egiz.eaaf.core.api.gui.IVelocityGuiBuilderConfiguration;  import at.gv.egiz.eaaf.core.exceptions.GuiBuildException;  import at.gv.egiz.eaaf.core.impl.gui.AbstractVelocityGuiFormBuilderImpl; @@ -63,4 +67,11 @@ public class DefaultVelocityGuiBuilderImpl extends AbstractVelocityGuiFormBuilde      }    } +  @Override +  public String evaluateResponseContentType(HttpServletRequest httpReq, IGuiBuilderConfiguration config, +      String loggerName) throws GuiBuildException { +    return MediaType.TEXT_HTML_VALUE; +     +  } +  } diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/SpringMvcGuiFormBuilderImpl.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/SpringMvcGuiFormBuilderImpl.java deleted file mode 100644 index 70ab73ad..00000000 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/SpringMvcGuiFormBuilderImpl.java +++ /dev/null @@ -1,123 +0,0 @@ -package at.asitplus.eidas.specific.connector.gui; - -import java.util.Locale; -import java.util.Map; - -import javax.annotation.Nullable; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.View; -import org.springframework.web.servlet.ViewResolver; - -import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; -import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; -import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; - -public class SpringMvcGuiFormBuilderImpl implements ISpringMvcGuiFormBuilder { -  private static final Logger log = LoggerFactory.getLogger(SpringMvcGuiFormBuilderImpl.class); - -  private @Autowired(required = false) ViewResolver[] viewResolvers; -  private @Autowired(required = false) LocaleResolver localeResolver; - -  @Override -  public void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGuiBuilderConfiguration config, -      String loggerName) throws GuiBuildException { -    build(httpReq, httpResp, config, null, loggerName); - -  } - -  @Override -  public void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGuiBuilderConfiguration config, -      String contentType, String loggerName) throws GuiBuildException { -    try { -      final ModelAndView mav = new ModelAndView(config.getViewName()); -      if (config.getViewParameters() != null) { -        mav.addAllObjects(config.getViewParameters()); -      } - -      render(mav, httpReq, httpResp); - -    } catch (final Exception e) { -      log.info("Can NOT generate GUI for illustration", e); -      throw new GuiBuildException(e.getMessage(), e); - -    } - -  } - -  protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) -      throws Exception { -    // Determine locale for request and apply it to the response. -    final Locale locale = -        this.localeResolver != null ? this.localeResolver.resolveLocale(request) : request.getLocale(); -    response.setLocale(locale); - -    View view; -    final String viewName = mv.getViewName(); -    if (viewName != null) { -      // We need to resolve the view name. -      view = resolveViewName(viewName, mv.getModelMap(), locale, request); -      if (view == null) { -        throw new ServletException("Could not resolve view with name '" + mv.getViewName() + "' "); -      } - -    } else { -      // No need to lookup: the ModelAndView object contains the actual View object. -      view = mv.getView(); -      if (view == null) { -        throw new ServletException("ModelAndView [" + mv + "] neither contains a view name nor a " -            + "View object "); -      } - -    } - -    // Delegate to the View object for rendering. -    if (log.isTraceEnabled()) { -      log.trace("Rendering view [{}] ", view); -       -    } - -    try { -      HttpStatus status = mv.getStatus(); -      if (status != null) { -        response.setStatus(status.value()); -         -      } - -      view.render(mv.getModelMap(), request, response); - -    } catch (final Exception ex) { -      if (log.isDebugEnabled()) { -        log.debug("Error rendering view [" + view + "]", ex); -      } - -      throw ex; - -    } - -  } - -  protected View resolveViewName(String viewName, @Nullable Map<String, Object> model, -      Locale locale, HttpServletRequest request) throws Exception { -    if (viewResolvers != null) { -      for (final ViewResolver viewResolver : this.viewResolvers) { -        final View view = viewResolver.resolveViewName(viewName, locale); -        if (view != null) { -          return view; -        } - -      } -    } - -    return null; -  } - -} diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/StaticGuiBuilderConfiguration.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/StaticGuiBuilderConfiguration.java index 25f5beda..9701ddda 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/StaticGuiBuilderConfiguration.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/StaticGuiBuilderConfiguration.java @@ -26,7 +26,7 @@ package at.asitplus.eidas.specific.connector.gui;  import java.io.IOException;  import java.io.InputStream; -import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.text.StringEscapeUtils;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.core.io.Resource; @@ -123,16 +123,16 @@ public class StaticGuiBuilderConfiguration extends AbstractGuiFormBuilderConfigu    @Override    public void putCustomParameter(GroupDefinition group, String key, String value) { -    setViewParameter(getFromGroup(), key, StringEscapeUtils.escapeHtml(value)); +    setViewParameter(getFromGroup(), key, StringEscapeUtils.escapeHtml4(value));    }    @Override    protected void putSpecificViewParameters() {      if (pendingReq != null) { -      setViewParameter(getFromGroup(), PARAM_PENDINGREQUESTID, StringEscapeUtils.escapeHtml(pendingReq +      setViewParameter(getFromGroup(), PARAM_PENDINGREQUESTID, StringEscapeUtils.escapeHtml4(pendingReq            .getPendingRequestId())); -      setViewParameter(getFromGroup(), PARAM_PENDINGREQUESTID_DEPRECATED, StringEscapeUtils.escapeHtml( +      setViewParameter(getFromGroup(), PARAM_PENDINGREQUESTID_DEPRECATED, StringEscapeUtils.escapeHtml4(            pendingReq.getPendingRequestId()));      } diff --git a/eidas_modules/authmodule-eIDAS-v2/pom.xml b/eidas_modules/authmodule-eIDAS-v2/pom.xml index d8c712b9..5a24b67f 100644 --- a/eidas_modules/authmodule-eIDAS-v2/pom.xml +++ b/eidas_modules/authmodule-eIDAS-v2/pom.xml @@ -6,7 +6,7 @@    <parent>      <groupId>at.asitplus.eidas.ms_specific</groupId>      <artifactId>modules</artifactId> -    <version>1.2.3</version> +    <version>1.2.4-SNAPSHOT</version>    </parent>    <groupId>at.asitplus.eidas.ms_specific.modules</groupId>    <artifactId>authmodule-eIDAS-v2</artifactId> diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java index e6484e63..715d3672 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java @@ -23,6 +23,17 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; +import java.text.MessageFormat; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.opensaml.saml.saml2.metadata.EntityDescriptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +  import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthRequestBuilderConfiguration; @@ -40,16 +51,7 @@ import at.gv.egiz.eaaf.modules.pvp2.exception.CredentialsNotAvailableException;  import at.gv.egiz.eaaf.modules.pvp2.sp.impl.PvpAuthnRequestBuilder;  import lombok.extern.slf4j.Slf4j;  import net.shibboleth.utilities.java.support.resolver.ResolverException; -import net.shibboleth.utilities.java.support.security.SecureRandomIdentifierGenerationStrategy; -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.opensaml.saml.saml2.metadata.EntityDescriptor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.text.MessageFormat; +import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;  /**   * Generate a SAML2 AuthnRequest to authenticate the user at ID Austria system. diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java index 4655d7ab..3e57ea24 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java @@ -316,7 +316,7 @@ public class ReceiveMobilePhoneSignatureResponseTask extends AbstractAuthServlet            new Object[]{MODULE_NAME_FOR_LOGGING,                response.getIssuer().getValue(),                response.getStatus().getStatusCode().getValue(), -              response.getStatus().getStatusMessage().getMessage()}); +              response.getStatus().getStatusMessage().getValue()});      }    } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java index a583ab2a..90e1b169 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthHealthCheckTest.java @@ -1,6 +1,8 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient; -import org.joda.time.DateTime; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +  import org.junit.Assert;  import org.junit.BeforeClass;  import org.junit.Test; @@ -113,7 +115,7 @@ public class IdAustriaClientAuthHealthCheckTest {      final EntityDescriptor metadata = (EntityDescriptor) XMLObjectSupport.unmarshallFromInputStream(      XMLObjectProviderRegistrySupport.getParserPool(),      IdAustriaClientAuthHealthCheckTest.class.getResourceAsStream("/data/idp_metadata_no_sig.xml")); -    metadata.setValidUntil(DateTime.now().plusDays(1)); +    metadata.setValidUntil(Instant.now().plus(1, ChronoUnit.DAYS));      metadata.setSignature(null);      metadata.setEntityID(dynEntityId);      Saml2Utils.signSamlObject(metadata, credentialProvider.getMetaDataSigningCredential(), true); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java index 4671684f..095a020a 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataControllerTest.java @@ -14,6 +14,7 @@ import org.opensaml.core.xml.io.UnmarshallingException;  import org.opensaml.core.xml.util.XMLObjectSupport;  import org.opensaml.saml.common.xml.SAMLConstants;  import org.opensaml.saml.metadata.resolver.filter.FilterException; +import org.opensaml.saml.metadata.resolver.filter.MetadataFilterContext;  import org.opensaml.saml.saml2.metadata.EntityDescriptor;  import org.opensaml.saml.saml2.metadata.SPSSODescriptor;  import org.springframework.beans.factory.annotation.Autowired; @@ -98,15 +99,17 @@ public class IdAustriaClientAuthMetadataControllerTest {          "http://localhost/authhandler" + IdAustriaClientAuthConstants.ENDPOINT_METADATA,          metadata.getEntityID()); +    MetadataFilterContext filterContext = new MetadataFilterContext(); +          //check XML scheme      final SchemaValidationFilter schemaFilter = new SchemaValidationFilter(); -    schemaFilter.filter(metadata); +    schemaFilter.filter(metadata, filterContext);      //check signature      final SimpleMetadataSignatureVerificationFilter sigFilter =          new SimpleMetadataSignatureVerificationFilter(credProvider.getKeyStore().getFirst(),              metadata.getEntityID()); -    sigFilter.filter(metadata); +    sigFilter.filter(metadata, filterContext);      //check content      final SPSSODescriptor spSsoDesc = metadata.getSPSSODescriptor(SAMLConstants.SAML20P_NS); @@ -122,12 +125,12 @@ public class IdAustriaClientAuthMetadataControllerTest {      Assert.assertFalse("NameIDFormats",          spSsoDesc.getNameIDFormats().isEmpty());      Assert.assertEquals("wrong NameIDFormats", "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", -        spSsoDesc.getNameIDFormats().get(0).getFormat()); +        spSsoDesc.getNameIDFormats().get(0).getURI());      Assert.assertFalse("AttributeConsumingServices",          spSsoDesc.getAttributeConsumingServices().isEmpty());      Assert.assertEquals("#RequestAttributes", numberOfRequestedAttributes, -        spSsoDesc.getAttributeConsumingServices().get(0).getRequestAttributes().size()); +        spSsoDesc.getAttributeConsumingServices().get(0).getRequestedAttributes().size());    }  } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java index da10fc54..c4dd5d2e 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/idaustriaclient/IdAustriaClientAuthMetadataProviderFirstTest.java @@ -1,9 +1,10 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.idaustriaclient;  import java.io.IOException; +import java.time.Instant; +import java.time.temporal.ChronoUnit;  import org.apache.commons.lang3.RandomStringUtils; -import org.joda.time.DateTime;  import org.junit.Assert;  import org.junit.Before;  import org.junit.BeforeClass; @@ -216,7 +217,7 @@ public class IdAustriaClientAuthMetadataProviderFirstTest {      final EntityDescriptor metadata = (EntityDescriptor) XMLObjectSupport.unmarshallFromInputStream(          XMLObjectProviderRegistrySupport.getParserPool(),          MetadataResolverTest.class.getResourceAsStream("/data/idp_metadata_no_sig.xml")); -    metadata.setValidUntil(DateTime.now().plusDays(1)); +    metadata.setValidUntil(Instant.now().plus(1, ChronoUnit.DAYS));      metadata.setSignature(null);      metadata.setEntityID(dynEntityId);      Saml2Utils.signSamlObject(metadata, credentialProvider.getMetaDataSigningCredential(), true); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java index 8e5ecfe1..dccbfda6 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/GenerateMobilePhoneSignatureRequestTaskTest.java @@ -1,5 +1,34 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.test.tasks; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.springframework.util.Assert.isInstanceOf; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Base64; +import java.util.Map; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; +import org.opensaml.core.xml.util.XMLObjectSupport; +import org.opensaml.saml.common.xml.SAMLConstants; +import org.opensaml.saml.saml2.core.AuthnRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +  import at.asitplus.eidas.specific.connector.test.config.dummy.MsConnectorDummyConfigMap;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.IdAustriaClientAuthConstants;  import at.asitplus.eidas.specific.modules.auth.eidas.v2.idaustriaclient.provider.IdAustriaClientAuthMetadataProvider; @@ -22,34 +51,6 @@ import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xIniti  import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils;  import at.gv.egiz.eaaf.modules.pvp2.impl.validation.TrustEngineFactory;  import at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; -import org.opensaml.core.xml.util.XMLObjectSupport; -import org.opensaml.saml.common.xml.SAMLConstants; -import org.opensaml.saml.saml2.core.AuthnRequest; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Base64; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.springframework.util.Assert.isInstanceOf;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations = { @@ -273,6 +274,12 @@ public class GenerateMobilePhoneSignatureRequestTaskTest {          return null;        } + +      @Override +      public boolean isWriteAsynch() { +        return false; +         +      }      };    } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java index 8094ac1e..d5400695 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/test/tasks/ReceiveMobilePhoneSignatureResponseTaskTest.java @@ -9,6 +9,7 @@ import java.io.IOException;  import java.io.InputStream;  import java.math.BigInteger;  import java.nio.charset.StandardCharsets; +import java.time.Instant;  import java.util.Arrays;  import java.util.Base64;  import java.util.Collections; @@ -20,13 +21,11 @@ import javax.xml.transform.TransformerException;  import org.apache.commons.io.IOUtils;  import org.apache.commons.lang3.RandomStringUtils;  import org.jetbrains.annotations.NotNull; -import org.joda.time.DateTime;  import org.junit.Before;  import org.junit.BeforeClass;  import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations;  import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;  import org.opensaml.core.xml.io.MarshallingException;  import org.opensaml.core.xml.util.XMLObjectSupport; @@ -455,12 +454,12 @@ public class ReceiveMobilePhoneSignatureResponseTaskTest {      InputStream inputStream = ReceiveMobilePhoneSignatureResponseTaskTest.class.getResourceAsStream(responsePath);      ParserPool parserPool = Objects.requireNonNull(XMLObjectProviderRegistrySupport.getParserPool());      Response response = (Response) XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream); -    response.setIssueInstant(DateTime.now()); +    response.setIssueInstant(Instant.now());      Issuer issuer = Saml2Utils.createSamlObject(Issuer.class);      issuer.setValue("classpath:/data/idp_metadata_classpath_entity.xml");      response.setIssuer(issuer);      if (validConditions) { -      response.getAssertions().get(0).getConditions().setNotOnOrAfter(DateTime.now().plusMinutes(5)); +      response.getAssertions().get(0).getConditions().setNotOnOrAfter(Instant.now().plusSeconds(5*60));      }      Response signedResponse = Saml2Utils.signSamlObject(response, credentialProvider.getMessageSigningCredential(), true);      addSamlResponseToHttpReq(signedResponse); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml index f4463a3e..0afa0d7d 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml +++ b/eidas_modules/authmodule-eIDAS-v2/src/test/resources/SpringTest-context_tasks_test.xml @@ -22,7 +22,7 @@    <import resource="classpath:/eaaf_pvp.beans.xml" />    <bean id="mvcGUIBuilderImpl" -    class="at.asitplus.eidas.specific.connector.gui.SpringMvcGuiFormBuilderImpl" /> +    class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />    <bean id="springManagedSpecificConnectorCommunicationService"      class="at.asitplus.eidas.specific.modules.auth.eidas.v2.test.dummy.DummySpecificCommunicationService" /> diff --git a/eidas_modules/pom.xml b/eidas_modules/pom.xml index 0693d793..758180e0 100644 --- a/eidas_modules/pom.xml +++ b/eidas_modules/pom.xml @@ -4,7 +4,7 @@  	<parent>      <groupId>at.asitplus.eidas</groupId>  	  <artifactId>ms_specific</artifactId> -	  <version>1.2.3</version> +	  <version>1.2.4-SNAPSHOT</version>  	</parent>  	<groupId>at.asitplus.eidas.ms_specific</groupId>  	<artifactId>modules</artifactId> diff --git a/infos/history.txt b/infos/history.txt new file mode 100644 index 00000000..53218f48 --- /dev/null +++ b/infos/history.txt @@ -0,0 +1,46 @@ +Dieses Dokument zeigt die Veränderungen und Erweiterungen am eIDAS MS-Connector + +Version 1.2.3 (2021-10-21):   +  - Bugfix +    - Inkompatibilität zwischen AT MS-Connector und ID Austria System behoben +  - Logging optimiert und Beispielkonfiguration um TransactionsId erweitert   +  - Akutalisierung von Drittherstellerbibliotheken + +Version 1.2.2 (2021-06-26): +  - Bugfix +    - Inkompatibilität zwischen AT MS-Connector, EidasNode v2.5 und Deutscher Middleware behoben + +Version 1.2.1 (2021-05-28): +   - Bugfix +     - Möglichen Fehler in der Sprachauswahl via GUI behoben +      +Version 1.2 (2021-05-12): +  - Erforderliche Anpassungen zur Integration in den ID Austria +  - Update auf eIDAS Ref. Impl. 2.5.0 (Implementiert eIDAS Spezifikation 1.2) https://ec.europa.eu/cefdigital/wiki/display/CEFDIGITAL/eIDAS-Node+version+2.5 +  - Codestabilisierung  +  - Monitoring und HealthChecks Verbesserungen +  - Akutalisierung von Drittherstellerbibliotheken + +Version 1.1 (2019-12-13):  +  - Update auf eIDAS Ref. Impl. 2.4.0 mit Apache Ignite Cache https://ec.europa.eu/cefdigital/wiki/display/CEFDIGITAL/eIDAS-Node+version+2.4 +  - Statischer Service-Provider Name für öffentliche Applikationen  +  - Mindest LoA, welche für Requests an eIDAS Proxy-Services verwendet wird. +  - Requested Attributes je Land konfigurierbar +  - Neue Template-Engine mit i18n Unterstützung +  - Neuer Algorithmus zur Generierung von Sessiontokens     +  - Akutalisierung von Drittherstellerbibliotheken + +Version 1.0.1 (2019-08-02):    +  - Update auf eIDAS Ref. Impl. 2.2.0 +  - Bugfix +    - Ungültige Zeichenkodierung bei nonLatin Zeichen behoben +  - Akutalisierung von Drittherstellerbibliotheken   +   +Version 1.0 (2018-10-30):  +  - Initiale Version des eIDAS MS-Connector + + + + + + diff --git a/infos/readme_1.2.3.md b/infos/readme_1.2.3.md index f0e25c7f..e3a56d31 100644 --- a/infos/readme_1.2.3.md +++ b/infos/readme_1.2.3.md @@ -1,4 +1,4 @@ -# MS-Connector v1.2.3 Release vom xx.10.2021 +# MS-Connector v1.2.3 Release vom 21.10.2021  Der MS-Connector implementiert eine Bridge zwischen dem österreichischen E-ID System und dem eIDAS Framework um ausländischen Benutzern eine Anmeldung am österreichischen Service-Providern zu ermöglichen. @@ -5,7 +5,7 @@    <modelVersion>4.0.0</modelVersion>    <groupId>at.asitplus.eidas</groupId>    <artifactId>ms_specific</artifactId> -  <version>1.2.3</version> +  <version>1.2.4-SNAPSHOT</version>    <packaging>pom</packaging>    <name>MS specific eIDAS components</name> @@ -22,29 +22,39 @@      <!-- ===================================================================== -->      <egiz-spring-api>0.3</egiz-spring-api>      <egiz-eventlog-slf4jBackend>0.4</egiz-eventlog-slf4jBackend> -    <eaaf-core.version>1.1.17</eaaf-core.version> +    <eaaf-core.version>1.2.1-SNAPSHOT</eaaf-core.version> -    <spring-boot-starter-web.version>2.5.4</spring-boot-starter-web.version> -    <spring-boot-admin-starter-client.version>2.5.1</spring-boot-admin-starter-client.version> -    <org.springframework.version>5.3.10</org.springframework.version> -    <org.thymeleaf-spring5.version>3.0.12.RELEASE</org.thymeleaf-spring5.version> -    <cxf.version>3.4.4</cxf.version> +    <spring-boot-starter-web.version>2.5.8</spring-boot-starter-web.version> +    <spring-boot-admin-starter-client.version>2.5.4</spring-boot-admin-starter-client.version> +    <org.springframework.version>5.3.14</org.springframework.version> +    <org.thymeleaf-spring5.version>3.0.14.RELEASE</org.thymeleaf-spring5.version> +    <apache.cxf.version>3.5.0</apache.cxf.version>      <eidas-ref.version>2.5.0</eidas-ref.version>      <org.apache.commons-lang3.version>3.12.0</org.apache.commons-lang3.version>      <org.apache.commons-text.version>1.9</org.apache.commons-text.version>      <commons-collections4.version>4.4</commons-collections4.version> -    <com.google.guava.version>30.1.1-jre</com.google.guava.version> -    <joda-time.version>2.10.10</joda-time.version> -    <org.slf4j.version>1.7.30</org.slf4j.version> -    <jackson-datatype-jsr310.version>2.12.5</jackson-datatype-jsr310.version> +    <commons-io.version>2.11.0</commons-io.version> +    <com.google.guava.version>31.0.1-jre</com.google.guava.version> +    <joda-time.version>2.10.13</joda-time.version> +     +    <org.slf4j.version>1.7.32</org.slf4j.version> +    <log4j.version>2.17.1</log4j.version>     +    <ch.qos.logback.version>1.2.10</ch.qos.logback.version> +   +    <jackson-datatype-jsr310.version>2.13.1</jackson-datatype-jsr310.version>      <!-- org.xerial.sqlite-jdbc.version>3.34.0</org.xerial.sqlite-jdbc.version -->      <javax.validation-api.version>2.0.1.Final</javax.validation-api.version>      <hibernate-validator.version>6.1.5.Final</hibernate-validator.version>      <org.bitbucket.b_c.jose4j.version>0.7.9</org.bitbucket.b_c.jose4j.version> + +    <!-- For software testing only --> +    <json-path.version>2.6.0</json-path.version> +    <jetty.version>9.4.44.v20210927</jetty.version> +      <!-- testing -->      <junit.version>4.13</junit.version>      <surefire.version>2.22.2</surefire.version> @@ -269,6 +279,16 @@          <version>${org.slf4j.version}</version>        </dependency>        <dependency> +        <groupId>org.apache.logging.log4j</groupId> +        <artifactId>log4j-to-slf4j</artifactId> +        <version>${log4j.version}</version> +      </dependency> +      <dependency> +        <groupId>ch.qos.logback</groupId> +        <artifactId>logback-classic</artifactId> +        <version>${ch.qos.logback.version}</version> +      </dependency>             +      <dependency>          <groupId>org.apache.commons</groupId>          <artifactId>commons-lang3</artifactId>          <version>${org.apache.commons-lang3.version}</version> @@ -279,6 +299,11 @@          <version>${org.apache.commons-text.version}</version>        </dependency>        <dependency> +        <groupId>commons-io</groupId> +        <artifactId>commons-io</artifactId> +        <version>${commons-io.version}</version> +      </dependency>       +      <dependency>          <groupId>com.google.guava</groupId>          <artifactId>guava</artifactId>          <version>${com.google.guava.version}</version> @@ -291,17 +316,47 @@        <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-core</artifactId> -        <version>${cxf.version}</version> +        <version>${apache.cxf.version}</version>        </dependency>        <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-rt-frontend-jaxws</artifactId> -        <version>${cxf.version}</version> +        <version>${apache.cxf.version}</version>        </dependency>        <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-rt-transports-http</artifactId> -        <version>${cxf.version}</version> +        <version>${apache.cxf.version}</version> +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-features-clustering</artifactId> +        <version>${apache.cxf.version}</version> +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-features-logging</artifactId> +        <version>${apache.cxf.version}</version> +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-databinding-jaxb</artifactId> +        <version>${apache.cxf.version}</version> +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-bindings-soap</artifactId> +        <version>${apache.cxf.version}</version> +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-frontend-jaxrs</artifactId> +        <version>${apache.cxf.version}</version> +      </dependency>       +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-testutils</artifactId> +        <version>${apache.cxf.version}</version>        </dependency>        <dependency>          <groupId>javax.servlet</groupId> @@ -362,6 +417,54 @@          <scope>test</scope>        </dependency>        <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-transports-http-jetty</artifactId> +        <version>${apache.cxf.version}</version> +        <scope>test</scope>       +      </dependency>             +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-transports-local</artifactId> +        <version>${apache.cxf.version}</version> +        <scope>test</scope>       +      </dependency> +      <dependency> +        <groupId>org.apache.cxf</groupId> +        <artifactId>cxf-rt-rs-extension-providers</artifactId> +        <version>${apache.cxf.version}</version> +        <scope>test</scope>       +      </dependency>       +      <dependency> +        <groupId>org.eclipse.jetty</groupId> +        <artifactId>jetty-http</artifactId> +        <version>${jetty.version}</version> +        <scope>test</scope> +      </dependency> +      <dependency> +        <groupId>org.eclipse.jetty</groupId> +        <artifactId>jetty-server</artifactId> +        <version>${jetty.version}</version> +        <scope>test</scope> +      </dependency> +      <dependency> +        <groupId>org.eclipse.jetty</groupId> +        <artifactId>jetty-io</artifactId> +        <version>${jetty.version}</version> +        <scope>test</scope> +      </dependency> +      <dependency> +        <groupId>org.eclipse.jetty</groupId> +        <artifactId>jetty-util</artifactId> +        <version>${jetty.version}</version> +        <scope>test</scope> +      </dependency>       +      <dependency> +        <groupId>org.eclipse.jetty</groupId> +        <artifactId>jetty-security</artifactId> +        <version>${jetty.version}</version> +        <scope>test</scope> +      </dependency>       +      <dependency>          <groupId>at.gv.egiz.eaaf</groupId>          <artifactId>eaaf_core_utils</artifactId>          <version>${eaaf-core.version}</version> @@ -428,7 +531,13 @@          <artifactId>powermock-api-mockito2</artifactId>          <version>${org.powermock.version}</version>          <scope>test</scope> -      </dependency>             +      </dependency> +      <dependency> +        <groupId>com.jayway.jsonpath</groupId> +        <artifactId>json-path</artifactId> +        <version>${json-path.version}</version> +        <scope>test</scope> +      </dependency>        </dependencies>    </dependencyManagement>    <dependencies> @@ -477,7 +586,7 @@          <plugin>            <groupId>org.apache.cxf</groupId>            <artifactId>cxf-codegen-plugin</artifactId> -          <version>${cxf.version}</version> +          <version>${apache.cxf.version}</version>          </plugin> | 
