diff options
Diffstat (limited to 'id/server')
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(); + +} | 
