Package org.ejbca.externalra.gui

Source Code of org.ejbca.externalra.gui.ExternalRaGuiConfiguration

/*************************************************************************
*                                                                       *
*  EJBCA: The OpenSource Certificate Authority                          *
*                                                                       *
*  This software is free software; you can redistribute it and/or       *
*  modify it under the terms of the GNU Lesser General Public           *
*  License as published by the Free Software Foundation; either         *
*  version 2.1 of the License, or any later version.                    *
*                                                                       *
*  See terms of license at gnu.org.                                     *
*                                                                       *
*************************************************************************/

package org.ejbca.externalra.gui;

import java.io.File;
import java.net.URL;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
import org.apache.log4j.Logger;

/**
* Configuration reader using Apache's Commons Configuration for the EJCBA External RA GUI.
*
* @version $Id: ExternalRaGuiConfiguration.java 9330 2010-06-30 18:16:53Z anatom $
*/
public class ExternalRaGuiConfiguration {
  private static Logger log = Logger.getLogger(ExternalRaGuiConfiguration.class);  

  private static CompositeConfiguration config = null;

  /** This is a singleton so it's not allowed to create an instance explicitly */
  private ExternalRaGuiConfiguration() {}

  private static final String PROPERTIES_FILENAME = "externalra-gui.properties";

  private static final String PROPERTY_CONFIGALLOWEXTERNAL = "allow.external-dynamic.configuration";
  private static final String PROPERTY_CASERVICECERT       = "externalra-gui.caservicecert";
  private static final String PROPERTY_KEYSTORE            = "externalra-gui.keystore";
  private static final String PROPERTY_KEYSTOREPASSWORD    = "externalra-gui.keystorepassword";
  private static final String PROPERTY_ISSUERCHAIN         = "externalra-gui.issuerchain";
  private static final String PROPERTY_TIMEOUT             = "externalra-gui.timeout";

  private static final String PROPERTY_HELPURL             = "externalra-gui.helpurl";
  private static final String PROPERTY_EXPORTABLE          = "externalra-gui.exportable";
 
  /** @return the path to the certificate of the CA's External RA API service keystore. */
  public static String getCaServiceCertPath() {
    return instance().getString(PROPERTY_CASERVICECERT, "/home/jboss/extra-keys/externalra-caservice.pem");
  }

  /** @return the path to the client keystore. */
  public static String getKeyStorePath() {
    return instance().getString(PROPERTY_KEYSTORE, "/home/jboss/extra-keys/externalra-gui.p12");
  }

  /** @return the password for the client keystore. */
  public static String getKeyStorePassword() {
    return instance().getString(PROPERTY_KEYSTOREPASSWORD, "foo123");
  }

  /** @return the path to the CA certificate chain PEM for the CA that has issued the client and service keystores. */
  public static String getIssuerChainPath() {
    return instance().getString(PROPERTY_ISSUERCHAIN, "/home/jboss/extra-keys/externalra-gui.issuer.pem");
  }
 
  /** @return a URL the user should be redirected to for help or null if no URL was defined */
  public static String getHelpUrl() {
    return instance().getString(PROPERTY_HELPURL, null);
  }

  /** @return true if we should suggest that browser generated keys should not be exportable. */
  public static boolean getExportable() {
    return "true".equalsIgnoreCase(instance().getString(PROPERTY_EXPORTABLE, "true"));
  }

  /** @return the configured timeout in seconds */
  public static int getTimeOut() {
    int ret = 30;
    try {
      ret = Integer.parseInt(instance().getString(PROPERTY_TIMEOUT, "" + ret));
    } catch (NumberFormatException e) {
    }
    return ret;
  }

  /** @return preferred key specification. The RSA algorithm is assumed. */
  public static String getKeySpec() {
    return instance().getString("externalra-gui.keyspec", "2048");
  }

  private static Configuration instance() {
    if (config == null) {
      try {
        // Default values build into war file, this is last prio used if no of the other sources override this
        boolean allowexternal = Boolean.getBoolean(new PropertiesConfiguration(ExternalRaGuiConfiguration.class.getResource("/" + PROPERTIES_FILENAME)).getString(PROPERTY_CONFIGALLOWEXTERNAL, "false"));
        config = new CompositeConfiguration();
        PropertiesConfiguration pc;
        // Only add these config sources if we allow external configuration
        if (allowexternal) {
          // Override with system properties, this is prio 1 if it exists (java -Dscep.test=foo)
          config.addConfiguration(new SystemConfiguration());
          log.info("Added system properties to configuration source (java -Dfoo.prop=bar).");
          // Override with file in "application server home directory"/conf, this is prio 2
          File f1 = new File("conf/" + PROPERTIES_FILENAME);
          pc = new PropertiesConfiguration(f1);
          pc.setReloadingStrategy(new FileChangedReloadingStrategy());
          config.addConfiguration(pc);
          log.info("Added file to configuration source: "+f1.getAbsolutePath());
          // Override with file in "/etc/ejbca/conf/extra, this is prio 3
          File f2 = new File("/etc/ejbca/conf/extra/" + PROPERTIES_FILENAME);
          pc = new PropertiesConfiguration(f2);
          pc.setReloadingStrategy(new FileChangedReloadingStrategy());
          config.addConfiguration(pc);
          log.info("Added file to configuration source: "+f2.getAbsolutePath());             
        }
        // Default values build into war file, this is last prio used if no of the other sources override this
        URL url = ExternalRaGuiConfiguration.class.getResource("/" + PROPERTIES_FILENAME);
        pc = new PropertiesConfiguration(url);
        config.addConfiguration(pc);
        log.info("Added url to configuration source: "+url);
        log.info("Allow external re-configuration: "+allowexternal);
      } catch (ConfigurationException e) {
        log.error("Error intializing ExtRA Configuration: ", e);
      }
    }
    return config;
  }
}
TOP

Related Classes of org.ejbca.externalra.gui.ExternalRaGuiConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.