package at.gv.egovernment.moa.id.config.proxy; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException; import org.w3c.dom.Element; import at.gv.egovernment.moa.id.config.ConfigurationBuilder; import at.gv.egovernment.moa.id.config.ConfigurationException; import at.gv.egovernment.moa.id.config.ConfigurationProvider; import at.gv.egovernment.moa.id.config.ConnectionParameter; import at.gv.egovernment.moa.logging.Logger; import at.gv.egovernment.moa.util.DOMUtils; import at.gv.egovernment.moa.util.FileUtils; /** * A class providing access to the Proxy Part of the MOA-ID configuration data. * *
Configuration data is read from an XML file, whose location is given by
* the moa.id.configuration
system property.
This class implements the Singleton pattern. The reload()
* method can be used to update the configuration data. Therefore, it is not
* guaranteed that consecutive calls to getInstance()
will return
* the same ProxyConfigurationProvider
all the time. During the
* processing of a web service request, the current
* TransactionContext
should be used to obtain the
* ProxyConfigurationProvider
local to that request.
null
, if none has been created. */
private static ProxyConfigurationProvider instance;
/**
* main configuration file directory name used to configure MOA-ID
*/
private String rootConfigFileDir;
//
// configuration data
//
/**
* connection parameters for connection to MOA ID Auth component
*/
private ConnectionParameter authComponentConnectionParameter;
/**
* configuration parameters for online applications
*/
private OAProxyParameter[] onlineApplicationProxyParameter;
/**
* Return the single instance of configuration data.
*
* @return ProxyConfigurationProvider The current configuration data.
* @throws ConfigurationException
*/
public static synchronized ProxyConfigurationProvider getInstance()
throws ConfigurationException {
if (instance == null) {
reload();
}
return instance;
}
/**
* Reload the configuration data and set it if successful.
*
* @return ProxyConfigurationProvider The loaded configuration data.
* @throws ConfigurationException Failure to load the configuration data.
*/
public static synchronized ProxyConfigurationProvider reload()
throws ConfigurationException {
String fileName = System.getProperty(CONFIG_PROPERTY_NAME);
if (fileName == null) {
throw new ConfigurationException("config.01", null);
}
Logger.info("Loading MOA-ID-PROXY configuration " + fileName);
instance = new ProxyConfigurationProvider(fileName);
return instance;
}
/**
* Constructor for ProxyConfigurationProvider.
*/
public ProxyConfigurationProvider(String fileName)
throws ConfigurationException {
load(fileName);
}
/**
* Load the configuration data from XML file with the given name and build
* the internal data structures representing the MOA configuration.
*
* @param fileName The name of the XML file to load.
* @throws ConfigurationException The MOA configuration could not be
* read/built.
*/
private void load(String fileName) throws ConfigurationException {
FileInputStream stream = null;
Element configElem;
ConfigurationBuilder builder;
try {
// load the main config file
stream = new FileInputStream(fileName);
configElem = DOMUtils.parseXmlValidating(stream);
}
catch (Throwable t) {
throw new ConfigurationException("config.03", null, t);
}
finally {
try {
if (stream != null) {
stream.close();
}
}
catch (IOException e) {
}
}
try {
// determine the directory of the root config file
rootConfigFileDir = new File(fileName).getParent();
try {
rootConfigFileDir = new File(rootConfigFileDir).toURL().toString();
} catch (MalformedURLException t) {
throw new ConfigurationException("config.03", null, t);
}
// build the internal datastructures
builder = new ConfigurationBuilder(configElem, rootConfigFileDir);
authComponentConnectionParameter = builder.buildAuthComponentConnectionParameter();
onlineApplicationProxyParameter = builder.buildOnlineApplicationProxyParameters();
for(int i = 0; i < onlineApplicationProxyParameter.length; i++) {
onlineApplicationProxyParameter[i].setConfigFileURL(FileUtils.makeAbsoluteURL(onlineApplicationProxyParameter[i].getConfigFileURL(), rootConfigFileDir));
}
genericConfiguration = builder.buildGenericConfiguration();
defaultChainingMode = builder.getDefaultChainingMode();
chainingModes = builder.buildChainingModes();
trustedCACertificates = builder.getTrustedCACertificates();
trustedCACertificates = FileUtils.makeAbsoluteURL(trustedCACertificates, rootConfigFileDir);
}
catch (Throwable t) {
throw new ConfigurationException("config.02", null, t);
}
}
/**
* Return a bean containing all information about the ProxyComponent
* @return The ConnectionParameter for the Proxy Component
*/
public ConnectionParameter getAuthComponentConnectionParameter() {
return authComponentConnectionParameter;
}
/**
* Build an array of OnlineApplication Parameter Beans containing all
* information about the proxy component of the online application
* @return An OAProxyParameter array containing beans
* with all relevant information for the proxy component of the online
* application
*/
public OAProxyParameter[] getOnlineApplicationParameters() {
return onlineApplicationProxyParameter;
}
/**
* Provides configuration information regarding the online application behind
* the given URL, relevant to the MOA-ID Proxy component.
*
* @param oaURL URL requested for an online application
* @return an OAProxyParameter
, or null
* if none is applicable
*/
public OAProxyParameter getOnlineApplicationParameter(String oaURL) {
OAProxyParameter[] oaParams = getOnlineApplicationParameters();
for (int i = 0; i < oaParams.length; i++) {
OAProxyParameter oaParam = oaParams[i];
if (oaURL.startsWith(oaParam.getPublicURLPrefix()))
return oaParam;
}
return null;
}
}