/*******************************************************************************
* Copyright 2014 Federal Chancellery Austria
* MOA-ID has been developed in a cooperation between BRZ, the Federal
* Chancellery Austria - ICT staff unit, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* 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.
******************************************************************************/
/*
* Copyright 2003 Federal Chancellery Austria
* MOA-ID has been developed in a cooperation between BRZ, the Federal
* Chancellery Austria - ICT staff unit, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* 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.gv.egovernment.moa.id.config;
import java.util.Map;
import java.util.Properties;
import org.hibernate.cfg.Configuration;
import at.gv.egovernment.moa.id.commons.db.MOASessionDBUtils;
import at.gv.egovernment.moa.id.commons.db.StatisticLogDBUtils;
import at.gv.egovernment.moa.id.commons.db.dao.session.AssertionStore;
import at.gv.egovernment.moa.id.commons.db.dao.session.AuthenticatedSessionStore;
import at.gv.egovernment.moa.id.commons.db.dao.session.ExceptionStore;
import at.gv.egovernment.moa.id.commons.db.dao.session.InterfederationSessionStore;
import at.gv.egovernment.moa.id.commons.db.dao.session.OASessionStore;
import at.gv.egovernment.moa.id.commons.db.dao.session.OldSSOSessionIDStore;
import at.gv.egovernment.moa.id.commons.db.dao.statistic.StatisticLog;
import at.gv.egovernment.moa.id.data.IssuerAndSerial;
import at.gv.egovernment.moa.id.process.dao.ProcessInstanceStore;
import at.gv.egovernment.moa.id.protocols.pvp2x.config.MOADefaultBootstrap;
import at.gv.egovernment.moa.logging.Logger;
import at.gv.util.config.EgovUtilPropertiesConfiguration;
/**
* Base class for AuthConfigurationProvider
and ProxyConfigurationProvider
,
* providing functions common to both of them.
*
* @author Paul Ivancsics
* @version $Id$
*/
public abstract class ConfigurationProviderImpl implements ConfigurationProvider{
/**
* Constructor
*/
public ConfigurationProviderImpl() {
super();
}
private EgovUtilPropertiesConfiguration eGovUtilsConfig = null;
/**
* The name of the system property which contains the file name of the
* configuration file.
*/
public static final String CONFIG_PROPERTY_NAME =
"moa.id.configuration";
/**
* The name of the system property which contains the file name of the
* configuration file.
*/
public static final String PROXY_CONFIG_PROPERTY_NAME =
"moa.id.proxy.configuration";
/**
* The name of the generic configuration property giving the certstore directory path.
*/
public static final String DIRECTORY_CERTSTORE_PARAMETER_PROPERTY =
"DirectoryCertStoreParameters.RootDir";
/**
* The name of the generic configuration property switching the ssl revocation checking on/off
*/
public static final String TRUST_MANAGER_REVOCATION_CHECKING =
"TrustManager.RevocationChecking";
/**
* A Map
which contains generic configuration information. Maps a
* configuration name (a String
) to a configuration value (also a
* String
).
*/
protected Map genericConfiguration;
/** The default chaining mode. */
protected String defaultChainingMode;
/**
* A Map
which contains the IssuerAndSerial
to
* chaining mode (a String
) mapping.
*/
protected Map chainingModes;
/**
* the URL for the trusted CA Certificates
*/
protected String trustedCACertificates;
/**
* main configuration file directory name used to configure MOA-ID
*/
protected String rootConfigFileDir;
protected String certstoreDirectory;
protected boolean trustmanagerrevoationchecking = true;
protected Properties configProp = null;
/**
* Returns the main configuration file directory used to configure MOA-ID
*
* @return the directory
*/
public String getRootConfigFileDir() {
return rootConfigFileDir;
}
public String getDefaultChainingMode() {
return defaultChainingMode;
}
/**
* Get the DB configuration properties from MOA-ID-Auth configuration file
*
* @return
*/
public Properties getDBConnectionConfiguration() {
return this.configProp;
}
/**
* @param properties
* @throws ConfigurationException
* @throws org.opensaml.xml.ConfigurationException
*/
public void initial(Properties props) throws ConfigurationException, org.opensaml.xml.ConfigurationException {
//Initial Hibernate Framework
Logger.trace("Initializing Hibernate framework.");
try {
// read MOAID Session Hibernate properties
Properties moaSessionProp = new Properties();
for (Object key : props.keySet()) {
String propPrefix = "moasession.";
if (key.toString().startsWith(propPrefix+"hibernate")) {
String propertyName = key.toString().substring(propPrefix.length());
moaSessionProp.put(propertyName, props.get(key.toString()));
}
}
// read Config Hibernate properties
configProp = new Properties();
for (Object key : props.keySet()) {
String propPrefix = "configuration.";
if (key.toString().startsWith(propPrefix+"hibernate")) {
String propertyName = key.toString().substring(propPrefix.length());
configProp.put(propertyName, props.get(key.toString()));
}
}
// read advanced logging properties
Properties statisticProps = new Properties();
for (Object key : props.keySet()) {
String propPrefix = "advancedlogging.";
if (key.toString().startsWith(propPrefix+"hibernate")) {
String propertyName = key.toString().substring(propPrefix.length());
statisticProps.put(propertyName, props.get(key.toString()));
}
}
// initialize hibernate
synchronized (ConfigurationProviderImpl.class) {
//Initial config Database
// ConfigurationDBUtils.initHibernate(configProp);
//initial MOAID Session Database
Configuration config = new Configuration();
config.addAnnotatedClass(AssertionStore.class);
config.addAnnotatedClass(AuthenticatedSessionStore.class);
config.addAnnotatedClass(OASessionStore.class);
config.addAnnotatedClass(OldSSOSessionIDStore.class);
config.addAnnotatedClass(ExceptionStore.class);
config.addAnnotatedClass(InterfederationSessionStore.class);
config.addAnnotatedClass(ProcessInstanceStore.class);
config.addProperties(moaSessionProp);
MOASessionDBUtils.initHibernate(config, moaSessionProp);
//initial advanced logging
if (Boolean.valueOf(props.getProperty("configuration.advancedlogging.active", "false"))) {
Logger.info("Advanced statistic log is activated, starting initialization process ...");
Configuration statisticconfig = new Configuration();
statisticconfig.addAnnotatedClass(StatisticLog.class);
statisticconfig.addProperties(statisticProps);
StatisticLogDBUtils.initHibernate(statisticconfig, statisticProps);
Logger.info("Advanced statistic log is initialized.");
}
}
Logger.trace("Hibernate initialization finished.");
} catch (ExceptionInInitializerError e) {
throw new ConfigurationException("config.17", null, e);
} finally {
}
//Initialize OpenSAML for STORK
Logger.info("Starting initialization of OpenSAML...");
MOADefaultBootstrap.bootstrap();
//DefaultBootstrap.bootstrap();
Logger.debug("OpenSAML successfully initialized");
//read eGovUtils client configuration
Properties eGovUtilsConfigProp = new Properties();
for (Object key : props.keySet()) {
String propPrefix = "service.";
if (key.toString().startsWith(propPrefix+"egovutil")) {
String propertyName = key.toString().substring(propPrefix.length());
eGovUtilsConfigProp.put(propertyName, props.get(key.toString()));
}
}
if (!eGovUtilsConfigProp.isEmpty()) {
Logger.info("Start eGovUtils client implementation configuration ...");
eGovUtilsConfig =
new EgovUtilPropertiesConfiguration(eGovUtilsConfigProp, rootConfigFileDir);
}
}
/**
* @return the eGovUtilsConfig
*/
public EgovUtilPropertiesConfiguration geteGovUtilsConfig() {
return eGovUtilsConfig;
}
}