aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationProvider.java66
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProviderFactory.java62
-rw-r--r--id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java538
3 files changed, 666 insertions, 0 deletions
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationProvider.java
new file mode 100644
index 000000000..5ec0a5bc6
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationProvider.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package at.gv.egovernment.moa.id.config;
+
+/**
+ * @author tlenz
+ *
+ */
+public interface ConfigurationProvider {
+
+ /**
+ * 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";
+
+ public String getRootConfigFileDir();
+
+ public String getDefaultChainingMode();
+
+ public String getTrustedCACertificates();
+
+ public String getCertstoreDirectory();
+
+ public boolean isTrustmanagerrevoationchecking();
+}
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProviderFactory.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProviderFactory.java
new file mode 100644
index 000000000..8fad1bc83
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProviderFactory.java
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+package at.gv.egovernment.moa.id.config.auth;
+
+import at.gv.egovernment.moa.id.config.ConfigurationException;
+import at.gv.egovernment.moa.id.config.ConfigurationProvider;
+import at.gv.egovernment.moa.logging.Logger;
+
+/**
+ * @author tlenz
+ *
+ */
+public class AuthConfigurationProviderFactory {
+
+ /** Singleton instance. <code>null</code>, if none has been created. */
+ private static AuthConfiguration instance = null;;
+
+
+ public static synchronized AuthConfiguration getInstance()
+ throws ConfigurationException {
+
+ if (instance == null) {
+ reload();
+ }
+ return instance;
+ }
+
+ /**
+ * @return
+ * @throws ConfigurationException
+ */
+ public static AuthConfiguration reload() throws ConfigurationException {
+ String fileName = System.getProperty(ConfigurationProvider.CONFIG_PROPERTY_NAME);
+ if (fileName == null) {
+ throw new ConfigurationException("config.01", null);
+ }
+ Logger.info("Loading MOA-ID-AUTH configuration " + fileName);
+
+ instance = new PropertyBasedAuthConfigurationProvider(fileName);
+ return instance;
+ }
+}
diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java
new file mode 100644
index 000000000..801e765c3
--- /dev/null
+++ b/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java
@@ -0,0 +1,538 @@
+/*
+ * 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.
+ */
+package at.gv.egiz.components.configuration.api;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author tlenz
+ *
+ */
+public abstract class AbstractConfigurationImpl implements Configuration {
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(AbstractConfigurationImpl.class);
+
+ /**
+ * Get all keys from configuration
+ * @return The List<string> values or null if no keys found
+ */
+ abstract protected List<String> getAllKeys() throws ConfigurationException;
+
+ /**
+ * Get key specific value from configuration
+ * @param key The cfg id
+ * @return The string value or null if not found
+ */
+ abstract protected String getValue(String key) throws ConfigurationException;
+
+ /**
+ * Check configuration contains a specific key
+ * @param key The cfg id
+ * @return True if the cfg key is found
+ */
+ abstract protected boolean containsKey(String key) throws ConfigurationException;
+
+ /**
+ * Store a key/value pair to configuration
+ * @param key The cfg key
+ * @param value The cfg value
+ */
+ abstract protected void storeKey(String key, String value) throws ConfigurationException;
+
+ /**
+ * Delete a key from configuration
+ * @param key The cfg key
+ */
+ abstract protected void deleteKey(String key) throws ConfigurationException;
+
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getStringValue(java.lang.String)
+ */
+ @Override
+ public String getStringValue(String id) throws ConfigurationException {
+ return getStringValue(id, null);
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getStringValue(java.lang.String, java.lang.String)
+ */
+ @Override
+ public String getStringValue(String id, String defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null) {
+ return defaultValue;
+ }
+ return value;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setStringValue(java.lang.String, java.lang.String)
+ */
+ @Override
+ public void setStringValue(String id, String value)
+ throws ConfigurationException {
+ if (containsKey(id)) {
+ logger.debug("{} is overwritten with {}", id, value);
+ }
+ storeKey(id, value);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getByteValue(java.lang.String)
+ */
+ @Override
+ public byte getByteValue(String id) throws ConfigurationException {
+ return getByteValue(id, (byte) 0);
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getByteValue(java.lang.String, byte)
+ */
+ @Override
+ public byte getByteValue(String id, byte defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ byte bvalue = Byte.parseByte(value);
+ return bvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a byte value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setByteValue(java.lang.String, byte)
+ */
+ @Override
+ public void setByteValue(String id, byte value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getShortValue(java.lang.String)
+ */
+ @Override
+ public short getShortValue(String id) throws ConfigurationException {
+ return getShortValue(id, (short) 0);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getShortValue(java.lang.String, short)
+ */
+ @Override
+ public short getShortValue(String id, short defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ short svalue = Short.parseShort(value);
+ return svalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a short value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setShortValue(java.lang.String, short)
+ */
+ @Override
+ public void setShortValue(String id, short value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getIntegerValue(java.lang.String)
+ */
+ @Override
+ public int getIntegerValue(String id) throws ConfigurationException {
+ return getIntegerValue(id, 0);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getIntegerValue(java.lang.String, int)
+ */
+ @Override
+ public int getIntegerValue(String id, int defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ int ivalue = Integer.parseInt(value);
+ return ivalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a int value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setIntegerValue(java.lang.String, int)
+ */
+ @Override
+ public void setIntegerValue(String id, int value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getLongValue(java.lang.String)
+ */
+ @Override
+ public long getLongValue(String id) throws ConfigurationException {
+ return getLongValue(id, 0L);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getLongValue(java.lang.String, long)
+ */
+ @Override
+ public long getLongValue(String id, long defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ long lvalue = Long.parseLong(value);
+ return lvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a long value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setLongValue(java.lang.String, long)
+ */
+ @Override
+ public void setLongValue(String id, long value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getFloatValue(java.lang.String)
+ */
+ @Override
+ public float getFloatValue(String id) throws ConfigurationException {
+ return getFloatValue(id, 0.0F);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getFloatValue(java.lang.String, float)
+ */
+ @Override
+ public float getFloatValue(String id, float defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ float fvalue = Float.parseFloat(value);
+ return fvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a float value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setFloatValue(java.lang.String, float)
+ */
+ @Override
+ public void setFloatValue(String id, float value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getDoubleValue(java.lang.String)
+ */
+ @Override
+ public double getDoubleValue(String id) throws ConfigurationException {
+ return getDoubleValue(id, 0.0D);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getDoubleValue(java.lang.String, double)
+ */
+ @Override
+ public double getDoubleValue(String id, double defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ double dvalue = Double.parseDouble(value);
+ return dvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a double value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setDoubleValue(java.lang.String, double)
+ */
+ @Override
+ public void setDoubleValue(String id, double value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getBooleanValue(java.lang.String)
+ */
+ @Override
+ public boolean getBooleanValue(String id) throws ConfigurationException {
+ return getBooleanValue(id, false);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getBooleanValue(java.lang.String, boolean)
+ */
+ @Override
+ public boolean getBooleanValue(String id, boolean defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ boolean bvalue = Boolean.parseBoolean(value);
+ return bvalue;
+ } catch (Throwable e) {
+ logger.warn(
+ "Invalid configuration value {} is not a boolean value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setBooleanValue(java.lang.String, boolean)
+ */
+ @Override
+ public void setBooleanValue(String id, boolean value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getCharValue(java.lang.String)
+ */
+ @Override
+ public char getCharValue(String id) throws ConfigurationException {
+ return getCharValue(id, '\0');
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getCharValue(java.lang.String, char)
+ */
+ @Override
+ public char getCharValue(String id, char defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value.toCharArray().length > 0) {
+ return value.toCharArray()[0];
+ }
+ logger.warn("Invalid configuration value {} is not a char value", id);
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setCharValue(java.lang.String, short)
+ */
+ @Override
+ public void setCharValue(String id, short value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getObjectValue(java.lang.String, java.lang.Class)
+ */
+ @Override
+ public <T> T getObjectValue(String id, Class<T> cls)
+ throws ConfigurationException {
+ return getObjectValue(id, cls, null);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getObjectValue(java.lang.String, java.lang.Class, java.lang.Object)
+ */
+ @Override
+ public <T> T getObjectValue(String id, Class<T> cls, T defaultValue)
+ throws ConfigurationException {
+ String savedValue = getStringValue(id);
+ if (savedValue == null) {
+ return defaultValue;
+ }
+ ObjectTranslator objectTranslator = ConfigurationFactory
+ .getObjectTranslator(cls);
+ if (objectTranslator == null) {
+ logger.warn(
+ "Found object value but could not find Object Transator for cls {}",
+ cls.getName());
+
+ throw new ConfigurationException("No Object Translator for ["
+ + cls.getName() + "] available");
+ }
+ return objectTranslator.toObject(savedValue, cls);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setObjectValue(java.lang.String, java.lang.Object)
+ */
+ @Override
+ public <T> void setObjectValue(String id, Object object)
+ throws ConfigurationException {
+ ObjectTranslator objectTranslator = ConfigurationFactory
+ .getObjectTranslator(object);
+ if (objectTranslator == null) {
+ logger.warn("Could not find Object Transator for cls {}", object
+ .getClass().getName());
+
+ throw new ConfigurationException("No Object Translator for ["
+ + object.getClass().getName() + "] available");
+ }
+ String cfgValue = objectTranslator.toString(object);
+ setStringValue(id, cfgValue);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#findConfigurationId(java.lang.String)
+ */
+ @Override
+ abstract public String[] findConfigurationId(String searchString)
+ throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#findByValue(java.lang.String)
+ */
+ @Override
+ abstract public String[] findByValue(String searchString)
+ throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getConfigurationIds()
+ */
+ @Override
+ public String[] getConfigurationIds() throws ConfigurationException {
+ List<String> allKeys = getAllKeys();
+ return allKeys.toArray(new String[allKeys.size()]);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getConfigurationIdNextLevel(java.lang.String)
+ */
+ @Override
+ public String[] getConfigurationIdNextLevel(String prefix)
+ throws ConfigurationException {
+ String[] allIds = getConfigurationIds();
+ Set<String> subIds = new HashSet<String>();
+
+ for (String id : allIds) {
+ if (id.startsWith(prefix)) {
+ String idAfterPrefix = id.substring(prefix.length());
+ int index = idAfterPrefix.indexOf(".");
+
+ if (index == 0) {
+ idAfterPrefix = idAfterPrefix.substring(1);
+ index = idAfterPrefix.indexOf(".");
+ }
+
+ if (index > 0) {
+ String adding = idAfterPrefix.substring(0, index);
+ if (!(adding.isEmpty())) {
+ subIds.add(adding);
+ }
+ } else if (!(idAfterPrefix.isEmpty())) {
+ subIds.add(idAfterPrefix);
+ }
+ }
+
+ }
+
+ String[] subIdarray = new String[subIds.size()];
+ subIdarray = (String[]) subIds.toArray(subIdarray);
+ return subIdarray;
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#synchronize()
+ */
+ @Override
+ abstract public void synchronize() throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getName()
+ */
+ @Override
+ abstract public String getName();
+
+}