diff options
Diffstat (limited to 'connector_lib/src/main')
8 files changed, 202 insertions, 5 deletions
| diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsConnectorEventCodes.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsConnectorEventCodes.java index 9c80f4ad..cfc434c4 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsConnectorEventCodes.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsConnectorEventCodes.java @@ -38,8 +38,15 @@ public class MsConnectorEventCodes {    public static final int SZR_IDL_RECEIVED = 6200;    public static final int SZR_BPK_RECEIVED = 6201; +  public static final int SZR_VSZ_RECEIVED = 6202; +  public static final int SZR_EIDASBIND_RECEIVED = 6203; +  public static final int TECH_AUCHBLOCK_CREATED = 6204;    public static final int SZR_ERNB_EIDAS_RAW_ID = 6210;    public static final int SZR_ERNB_EIDAS_ERNB_ID = 6211; +   +  private MsConnectorEventCodes() { +    // hidden constructor for class with static values only. +  }  } diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsEidasNodeConstants.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsEidasNodeConstants.java index 1300ad74..379ed378 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsEidasNodeConstants.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/MsEidasNodeConstants.java @@ -105,7 +105,7 @@ public class MsEidasNodeConstants { -  public static final String PROP_CONFIG_SP_LIST_PREFIX = "sp."; +  public static final String PROP_CONFIG_SP_LIST_PREFIX = "sp";    public static final String PROP_CONFIG_SP_UNIQUEIDENTIFIER = EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER;    public static final String PROP_CONFIG_SP_FRIENDLYNAME = "friendlyName";    public static final String PROP_CONFIG_SP_PVP2_METADATA_URL = "pvp2.metadata.url"; @@ -172,4 +172,8 @@ public class MsEidasNodeConstants {    public static final List<String> COUNTRY_SELECTION_PARAM_WHITELIST =        Arrays.asList(REQ_PARAM_SELECTED_COUNTRY, REQ_PARAM_SELECTED_ENVIRONMENT); +  private MsEidasNodeConstants() { +    //hidden Constructor for class with static values only. +  } +    } diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/BasicConfigurationProvider.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/BasicConfigurationProvider.java index 355c63f2..89ccdfe7 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/BasicConfigurationProvider.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/BasicConfigurationProvider.java @@ -31,6 +31,7 @@ import java.util.Map.Entry;  import org.apache.commons.lang3.StringUtils;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile;  import org.springframework.stereotype.Service;  import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; @@ -41,6 +42,7 @@ import at.gv.egiz.eaaf.core.impl.idp.conf.AbstractConfigurationImpl;  import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils;  @Service("BasicMSSpecificNodeConfig") +@Profile("deprecatedConfig")  public class BasicConfigurationProvider extends AbstractConfigurationImpl {    private static final Logger log = LoggerFactory.getLogger(BasicConfigurationProvider.class); @@ -56,7 +58,7 @@ public class BasicConfigurationProvider extends AbstractConfigurationImpl {      if (!spConfigCache.containsKey(entityId)) {        log.debug("SP: " + entityId + " is NOT cached. Starting load operation ...  ");        final Map<String, String> allSPs = getBasicConfigurationWithPrefix( -          MsEidasNodeConstants.PROP_CONFIG_SP_LIST_PREFIX); +          MsEidasNodeConstants.PROP_CONFIG_SP_LIST_PREFIX + KeyValueUtils.KEY_DELIMITER);        for (Entry<String, String> entry : allSPs.entrySet()) {          if (entry.getKey().endsWith(MsEidasNodeConstants.PROP_CONFIG_SP_UNIQUEIDENTIFIER)               && entry.getValue().equals(entityId)) { diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/ServiceProviderConfiguration.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/ServiceProviderConfiguration.java index 6f7eace3..362d0244 100644 --- a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/ServiceProviderConfiguration.java +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/ServiceProviderConfiguration.java @@ -57,12 +57,14 @@ public class ServiceProviderConfiguration extends SpConfigurationImpl {    } +      @Override    public boolean hasBaseIdTransferRestriction() {      final Boolean spConfigPolicy = isConfigurationValue(          MsEidasNodeConstants.PROP_CONFIG_SP_POLICY_BASEIDTRANSFER_RESTRICTION); -    if (spConfigPolicy != null) { +    if (spConfigPolicy) {        return spConfigPolicy; +      } else {        log.trace("SP configuration defines no baseID transfer restriction. Enforce default policy ...");        for (final String el : getTargetsWithNoBaseIdTransferRestriction()) { diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/SpringBootBasicConfigurationProvider.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/SpringBootBasicConfigurationProvider.java new file mode 100644 index 00000000..76e2c01f --- /dev/null +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/config/SpringBootBasicConfigurationProvider.java @@ -0,0 +1,122 @@ +package at.asitplus.eidas.specific.connector.config; + +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.lang3.StringUtils; + +import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration; +import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; +import at.gv.egiz.eaaf.core.exceptions.EaafException; +import at.gv.egiz.eaaf.core.impl.idp.conf.AbstractSpringBootConfigurationImpl; +import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class SpringBootBasicConfigurationProvider extends AbstractSpringBootConfigurationImpl { + +  private final Map<String, ISpConfiguration> spConfigCache = new HashMap<>(); +   +  @Override +  public ISpConfiguration getServiceProviderConfiguration(String entityId) throws EaafConfigurationException { +    if (!spConfigCache.containsKey(entityId)) { +      log.debug("SP: " + entityId + " is NOT cached. Starting load operation ...  "); +      final Map<String, String> allSPs = getBasicConfigurationWithPrefix( +          MsEidasNodeConstants.PROP_CONFIG_SP_LIST_PREFIX); +      for (Entry<String, String> entry : allSPs.entrySet()) { +        if (entry.getKey().endsWith(MsEidasNodeConstants.PROP_CONFIG_SP_UNIQUEIDENTIFIER)  +            && entry.getValue().equals(entityId)) { +          final String listId = KeyValueUtils.getParentKey(entry.getKey()); +          log.trace("Find SP configuration with list-Id: " + listId +              + ". Extracting configuration elements ... "); +          final Map<String, String> spConfig = KeyValueUtils.getSubSetWithPrefix(allSPs, listId +              + KeyValueUtils.KEY_DELIMITER); +          spConfigCache.put(entityId, +              new ServiceProviderConfiguration(spConfig, this)); +          break; +        } +      } + +      if (spConfigCache.containsKey(entityId)) { +        log.info("SP: " + entityId + " is loaded. Continuing auth. process ... "); +      } else { +        log.warn("SP: " + entityId + " is NOT found in configuration. Stopping auth. process ... "); +        return null; + +      } + +    } else { +      log.trace("SP: " + entityId + " is already cached. Use configuration from there ... "); +    } + +    return spConfigCache.get(entityId); +  } + +  @Override +  public <T> T getServiceProviderConfiguration(String entityId, Class<T> decorator) +      throws EaafConfigurationException { +    final ISpConfiguration spConfig = getServiceProviderConfiguration(entityId); +    if (spConfig != null && decorator != null) { +      if (decorator.isInstance(spConfig)) { +        return (T) spConfig; +      } else { +        log.error("SPConfig: " + spConfig.getClass().getName() + " is NOT instance of: " + decorator +            .getName()); +      } + +    } + +    return null; + +  } + +  @Override +  public String validateIdpUrl(URL url) throws EaafException { +    log.trace("Validate requested URL: " + url); +    String urlPrefixFromConfig = getBasicConfiguration( +        MsEidasNodeConstants.PROP_CONFIG_APPLICATION_PUBLIC_URL_PREFIX); +    if (StringUtils.isEmpty(urlPrefixFromConfig)) { +      log.warn("Application config containts NO URL prefix"); +      throw new EaafConfigurationException("config.27", +          new Object[] { "Application config containts NO " +              + getApplicationSpecificKeyPrefix() +              + MsEidasNodeConstants.PROP_CONFIG_APPLICATION_PUBLIC_URL_PREFIX }); + +    } + +    // remove last slash +    if (urlPrefixFromConfig.endsWith("/")) { +      urlPrefixFromConfig = urlPrefixFromConfig.substring(0, urlPrefixFromConfig.length() - 1); +    } + +    if (getBasicConfigurationBoolean( +        MsEidasNodeConstants.PROP_CONFIG_APPLICATION_PUBLIC_URL_REQUEST_VALIDATION, false)) { +      if (url != null && url.toExternalForm().startsWith(urlPrefixFromConfig)) { +        return urlPrefixFromConfig; +      } + +      log.info("URL: " + url + " does NOT match to allowed application prefix: " + urlPrefixFromConfig); +      return null; + +    } else { +      return urlPrefixFromConfig; + +    } +  } + +  @Override +  public String getApplicationSpecificKeyPrefix() { +    return MsEidasNodeConstants.PROP_CONFIG_APPLICATION_PREFIX; + +  } + +  @Override +  protected String getBackupConfigPath() { +    return null; + +  } + +} 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 7abc6fcb..e7ebc92f 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 @@ -33,7 +33,7 @@ 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; -@Service("DefaultVelocityGUIBuilderImpl") +@Service("velocityGUIBuilderImpl")  public class DefaultVelocityGuiBuilderImpl extends AbstractVelocityGuiFormBuilderImpl {    private static final Logger log = LoggerFactory.getLogger(DefaultVelocityGuiBuilderImpl.class); 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 65000ffa..25f5beda 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 @@ -117,7 +117,7 @@ public class StaticGuiBuilderConfiguration extends AbstractGuiFormBuilderConfigu    @Override    public void putCustomParameterWithOutEscaption(GroupDefinition group, String key, Object value) { -    log.info("Add GUI-Template parameters WITHOUT escaption ARE NOT supported!!!!!"); +    setViewParameter(getFromGroup(), key, value);    } diff --git a/connector_lib/src/main/resources/common_gui.beans.xml b/connector_lib/src/main/resources/common_gui.beans.xml new file mode 100644 index 00000000..969a40f7 --- /dev/null +++ b/connector_lib/src/main/resources/common_gui.beans.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +  xmlns:context="http://www.springframework.org/schema/context" +  xmlns:tx="http://www.springframework.org/schema/tx" +  xmlns:aop="http://www.springframework.org/schema/aop" +  xmlns:task="http://www.springframework.org/schema/task" +  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd +    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd +    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd +    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  +    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> + +  <bean id="contentNegotiationManager" +    class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean" +    primary="true"> +    <property name="parameterName" value="mediaType" /> +    <property name="defaultContentType" value="application/json" /> +    <property name="useRegisteredExtensionsOnly" value="false" /> +    <property name="mediaTypes"> +      <map> +        <entry key="json" value="application/json" /> +        <entry key="html" value="text/html" /> +      </map> +    </property> +  </bean> + +  <bean +    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> +    <property name="order" value="1" /> +    <property name="defaultViews"> +      <list> +        <!-- JSON View --> +        <bean +          class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"> +          <property name="contentType" value="application/json" /> +        </bean> +      </list> +    </property> +  </bean> + + +  <bean id="templateEngine" +    class="org.thymeleaf.spring5.SpringTemplateEngine"> +    <property name="templateResolver" ref="templateResolver" /> +  </bean> + +  <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> +    <property name="order" value="2" /> +    <property name="templateEngine" ref="templateEngine" /> +    <property name="characterEncoding" value="UTF-8" /> +  </bean> + +  <bean id="valitatorWithI18nSupport" +    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> +    <property name="validationMessageSource" +      ref="messageSource" /> +  </bean> + +</beans>
\ No newline at end of file | 
