private void merge()

in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/config/TobagoConfigMerger.java [55:150]


  private void merge() {

    // default sanitizer
    String sanitizerClass = JsoupSanitizer.class.getName();
    Properties sanitizerProperties = new Properties();
    sanitizerProperties.setProperty("safelist", "relaxed");

    for (TobagoConfigFragment fragment : fragments) {

      // default theme
      final String defaultTheme = fragment.getDefaultThemeName();
      if (defaultTheme != null) {
        tobagoConfig.setDefaultThemeName(defaultTheme);
      }

      // supported themes
      for (final String supported : fragment.getSupportedThemeNames()) {
        tobagoConfig.addSupportedThemeName(supported);
      }

      // theme cookie
      if (fragment.getThemeCookie() != null) {
        tobagoConfig.setThemeCookie(fragment.getThemeCookie());
      }

      // theme session
      if (fragment.getThemeSession() != null) {
        tobagoConfig.setThemeSession(fragment.getThemeSession());
      }

      // session secret
      if (fragment.getCreateSessionSecret() != null) {
        tobagoConfig.setCreateSessionSecret(fragment.getCreateSessionSecret());
      }
      if (fragment.getCheckSessionSecret() != null) {
        tobagoConfig.setCheckSessionSecret(fragment.getCheckSessionSecret());
      }

      if (fragment.getPreventFrameAttacks() != null) {
        tobagoConfig.setPreventFrameAttacks(fragment.getPreventFrameAttacks());
      }

      if (fragment.getContentSecurityPolicy() != null) {
        tobagoConfig.getContentSecurityPolicy().merge(fragment.getContentSecurityPolicy());
      }

      if (fragment.getSecurityAnnotation() != null) {
        tobagoConfig.setSecurityAnnotation(fragment.getSecurityAnnotation());
      }

      if (fragment.getSetNosniffHeader() != null) {
        tobagoConfig.setSetNosniffHeader(fragment.getSetNosniffHeader());
      }

      if (fragment.getSanitizerClass() != null) {
        sanitizerClass = fragment.getSanitizerClass();
        sanitizerProperties = fragment.getSanitizerProperties();
      }

      if (fragment.getDecodeLineFeed() != null) {
        tobagoConfig.setDecodeLineFeed(fragment.getDecodeLineFeed());
      }

      if (fragment.getEnableTobagoExceptionHandler() != null) {
        tobagoConfig.setEnableTobagoExceptionHandler(fragment.getEnableTobagoExceptionHandler());
      }

      // theme definition
      for (final ThemeImpl theme : fragment.getThemeDefinitions()) {
        tobagoConfig.addAvailableTheme(theme);
      }

      // url
      // todo???

      final Map<String, String> mimeTypes = tobagoConfig.getMimeTypes();
      for (final Map.Entry<String, String> entry : fragment.getMimeTypes().entrySet()) {
        mimeTypes.put(entry.getKey(), entry.getValue());
      }

    }

    resolveThemes(tobagoConfig.getAvailableThemes());

    if (sanitizerClass != null) {
      try {
        final Class<? extends Sanitizer> aClass = Class.forName(sanitizerClass).asSubclass(Sanitizer.class);
        final Sanitizer sanitizer = aClass.newInstance();
        sanitizer.setProperties(sanitizerProperties);
        tobagoConfig.setSanitizer(sanitizer);
      } catch (final Exception e) {
        LOG.error("Can't create sanitizer: '" + sanitizerClass + "'", e);
        tobagoConfig.setSanitizer(new IgnoringSanitizer());
      }
    }
  }