diff options
Diffstat (limited to 'connector_lib/src')
| -rw-r--r-- | connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/config/StaticResourceConfiguration.java | 207 | ||||
| -rw-r--r-- | connector_lib/src/main/resources/common_gui.beans.xml | 3 | 
2 files changed, 210 insertions, 0 deletions
| diff --git a/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/config/StaticResourceConfiguration.java b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/config/StaticResourceConfiguration.java new file mode 100644 index 00000000..1f357674 --- /dev/null +++ b/connector_lib/src/main/java/at/asitplus/eidas/specific/connector/gui/config/StaticResourceConfiguration.java @@ -0,0 +1,207 @@ +/* + * Copyright 2019 A-SIT Plus GmbH + * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, + * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "License"); + * You may not use this work except in compliance with the License. + * You may obtain a copy of the License at: + * https://joinup.ec.europa.eu/news/understanding-eupl-v12 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.asitplus.eidas.specific.connector.gui.config; + +import java.net.MalformedURLException; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.thymeleaf.templateresolver.FileTemplateResolver; + +import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.gv.egiz.eaaf.core.api.idp.IConfiguration; +import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation; +import at.gv.egiz.eaaf.core.impl.utils.FileUtils; + +/** + * Spring configurator for Web resources. + *  + * @author tlenz + * + */ +@Configuration +@EnableWebMvc +public class StaticResourceConfiguration implements WebMvcConfigurer { +  private static final Logger log = LoggerFactory.getLogger(StaticResourceConfiguration.class); +  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { +      "/" +  }; + +  private static final String DEFAULT_MESSAGE_SOURCE = "classpath:properties/status_messages"; + +  @Autowired +  private IConfiguration basicConfig; + +  @Override +  public void addResourceHandlers(ResourceHandlerRegistry registry) { +    final String staticResources = basicConfig.getBasicConfiguration( +        MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_STATIC_PATH); +    try { +      if (StringUtils.isNotEmpty(staticResources)) { +        String absPath = FileUtils.makeAbsoluteUrl(staticResources, basicConfig +            .getConfigurationRootDirectory()); +        if (!absPath.endsWith("/")) { +          absPath += "/"; +        } + +        registry.addResourceHandler("/static/**").addResourceLocations(absPath); +        log.info("Add Ressourcefolder: " + absPath + " for static Web content"); + +      } else { +        log.debug("No Ressourcefolder for static Web content"); +      } + +    } catch (final MalformedURLException e) { +      log.warn("Can NOT initialize ressourcefolder for static Web content", e); + +    } + +    registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); + +  } + +  /** +   * Get a message source with only internal message properties. +   * +   * @param ressourceLocations List of source-locations +   * @return +   */ +  @Bean +  public ReloadableResourceBundleMessageSource internalMessageSource( +      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { +    final ReloadableResourceBundleMessageSource messageSource = +        new ReloadableResourceBundleMessageSource(); + +    // add default message source +    messageSource.setBasename(DEFAULT_MESSAGE_SOURCE); + +    if (ressourceLocations != null) { +      // load more message sources +      for (final IMessageSourceLocation el : ressourceLocations) { +        if (el.getMessageSourceLocation() != null) { +          for (final String source : el.getMessageSourceLocation()) { +            messageSource.addBasenames(source); +            log.debug("Add additional messageSources: {}", el.getMessageSourceLocation().toArray()); + +          } +        } +      } +    } + +    messageSource.setDefaultEncoding("UTF-8"); +    return messageSource; + +  } + +  /** +   * Get full message source with internal and external message-properties files. +   * +   * @param ressourceLocations List of source-locations +   * @return +   */ +  @Bean +  public ReloadableResourceBundleMessageSource messageSource( +      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { +    final ReloadableResourceBundleMessageSource messageSource = +        new ReloadableResourceBundleMessageSource(); +    messageSource.setDefaultEncoding("UTF-8"); +    messageSource.setParentMessageSource(internalMessageSource(ressourceLocations)); + +    final String staticResources = basicConfig +        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_PROPERTIES_PATH); +    try { +      if (StringUtils.isNotEmpty(staticResources)) { +        final String absPath = +            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); +        messageSource.setBasename(absPath); + +      } else { +        log.debug("No Ressourcefolder for dynamic Web content templates"); + +      } + +    } catch (final MalformedURLException e) { +      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); + +    } + +    return messageSource; + +  } +     +  /** +   * Get a Tyhmeleaf Template-Resolver with external configuration path. +   * +   * @return +   */ +  @Bean(name = "templateResolver") +  public FileTemplateResolver templateResolver() { +    final String staticResources = basicConfig +        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_PATH); +    try { +      if (StringUtils.isNotEmpty(staticResources)) { +        String absPath = +            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); +        if (!absPath.endsWith("/")) { +          absPath += "/"; + +        } + +        if (absPath.startsWith("file:")) { +          absPath = absPath.substring("file:".length()); + +        } + +        final FileTemplateResolver viewResolver = new FileTemplateResolver(); +        viewResolver.setPrefix(absPath); +        viewResolver.setSuffix(".html"); +        viewResolver.setTemplateMode("HTML"); +        viewResolver.setCacheable(false); + +        log.info("Add Ressourcefolder: {} for dynamic Web content templates", absPath); +        return viewResolver; + +      } else { +        log.debug("No Ressourcefolder for dynamic Web content templates"); + +      } + +    } catch (final MalformedURLException e) { +      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); + +    } + +    throw new RuntimeException("Can NOT initialize HTML template resolver"); + +  } +} diff --git a/connector_lib/src/main/resources/common_gui.beans.xml b/connector_lib/src/main/resources/common_gui.beans.xml index 969a40f7..fc19efdc 100644 --- a/connector_lib/src/main/resources/common_gui.beans.xml +++ b/connector_lib/src/main/resources/common_gui.beans.xml @@ -11,6 +11,9 @@      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="WebResourceConfiguration" +        class="at.asitplus.eidas.specific.connector.gui.config.StaticResourceConfiguration" /> +    <bean id="contentNegotiationManager"      class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"      primary="true"> | 
