blob: 6cd3868c4bfeb77fcf14806cd229ce5602ddf45e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.securevault.definition;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.securevault.commons.MiscellaneousUtil;
import org.apache.synapse.securevault.secret.SecretInformationFactory;
import java.util.Properties;
/**
* Factory for creating KeyStoreInformation based on properties
*/
public class KeyStoreInformationFactory {
private static Log log = LogFactory.getLog(KeyStoreInformationFactory.class);
/* Private key entry KeyStore location */
private final static String IDENTITY_KEY_STORE = "keystore.identity.location";
/* Private key entry KeyStore type */
private final static String IDENTITY_KEY_STORE_TYPE = "keystore.identity.type";
/* Alias for private key entry KeyStore */
private final static String IDENTITY_KEY_STORE_ALIAS = "keystore.identity.alias";
/* Password for access keyStore*/
private final static String IDENTITY_KEY_STORE_PASSWORD = "keystore.identity.store";
/* Password for get private key*/
private final static String IDENTITY_KEY_PASSWORD = "keystore.identity.key";
private final static String KEY_STORE_PARAMETERS = "keystore.identity.parameters";
/* Trusted certificate KeyStore location */
private final static String TRUST_STORE = "keystore.trust.location";
/* Trusted certificate KeyStore type*/
private final static String TRUST_STORE_TYPE = "keystore.trust.type";
/* Alias for certificate KeyStore */
private final static String TRUST_STORE_ALIAS = "keystore.trust.alias";
/* Password for access TrustStore*/
private final static String TRUST_STORE_PASSWORD = "keystore.trust.store";
private final static String TRUST_STORE_PARAMETERS = "keystore.trust.parameters";
/* Dot string */
private final static String DOT = ".";
/* Prompt for trust store password*/
private final static String TRUSTSTORE_PASSWORD_PROMPT = "Trust Store Password > ";
/* Prompt for identity store password*/
private final static String IDENTITYSTORE_PASSWORD_PROMPT = "Identity Store Password > ";
/* Prompt for identity store private key password*/
private final static String IDENTITYSTORE_PRIVATE_KEY_PASSWORD_PROMPT
= "Identity Store Private Key Password > ";
/**
* Creates a KeyStoreInformation using synapse properties
* Uses KeyStore configuration properties
*
* @param properties Synapse Properties
* @return IdentityKeyStoreInformation instance
*/
public static IdentityKeyStoreInformation createIdentityKeyStoreInformation(Properties properties) {
String keyStoreLocation = MiscellaneousUtil.getProperty(
properties, IDENTITY_KEY_STORE, null);
if (keyStoreLocation == null || "".equals(keyStoreLocation)) {
if (log.isDebugEnabled()) {
log.debug("Cannot find a KeyStoreLocation for private key store");
}
return null;
}
IdentityKeyStoreInformation keyStoreInformation = new IdentityKeyStoreInformation();
keyStoreInformation.setAlias(
MiscellaneousUtil.getProperty(properties,
IDENTITY_KEY_STORE_ALIAS, null));
keyStoreInformation.setLocation(keyStoreLocation);
keyStoreInformation.setStoreType(
MiscellaneousUtil.getProperty(properties,
IDENTITY_KEY_STORE_TYPE, null));
keyStoreInformation.setKeyStorePasswordProvider(
SecretInformationFactory.createSecretInformation(properties,
IDENTITY_KEY_STORE_PASSWORD + DOT,
IDENTITYSTORE_PASSWORD_PROMPT));
keyStoreInformation.setKeyPasswordProvider(
SecretInformationFactory.createSecretInformation(
properties, IDENTITY_KEY_PASSWORD + DOT,
IDENTITYSTORE_PRIVATE_KEY_PASSWORD_PROMPT));
String parameterString = MiscellaneousUtil.getProperty(
properties, KEY_STORE_PARAMETERS, null);
//Adds optional parameters
parseParameter(parameterString, keyStoreInformation);
return keyStoreInformation;
}
/**
* Creates a TrustKeyStoreInformation using synapse properties
* Uses TrustStore Configuration properties
*
* @param properties Synapse Properties
* @return TrustKeyStoreInformation instance
*/
public static TrustKeyStoreInformation createTrustKeyStoreInformation(Properties properties) {
String keyStoreLocation =
MiscellaneousUtil.getProperty(properties,
TRUST_STORE, null);
if (keyStoreLocation == null || "".equals(keyStoreLocation)) {
if (log.isDebugEnabled()) {
log.debug("Cannot find a KeyStoreLocation for trust store");
}
return null;
}
TrustKeyStoreInformation trustInformation = new TrustKeyStoreInformation();
trustInformation.setAlias(
MiscellaneousUtil.getProperty(properties, TRUST_STORE_ALIAS, null));
trustInformation.setLocation(keyStoreLocation);
trustInformation.setStoreType(
MiscellaneousUtil.getProperty(properties,
TRUST_STORE_TYPE, null));
trustInformation.setKeyStorePasswordProvider(
SecretInformationFactory.createSecretInformation(
properties, TRUST_STORE_PASSWORD + DOT, TRUSTSTORE_PASSWORD_PROMPT));
String parameterString = MiscellaneousUtil.getProperty(
properties, TRUST_STORE_PARAMETERS, null);
//Adds optional parameters
parseParameter(parameterString, trustInformation);
return trustInformation;
}
/**
* Helper method to parse parameter values (String ) and add those to KeyStoreInformation
*
* @param parameterString Parameter String
* @param information KeyStoreInformation
*/
private static void parseParameter(String parameterString, KeyStoreInformation information) {
if (parameterString == null || "".equals(parameterString)) {
if (log.isDebugEnabled()) {
log.debug("No additional parameter for KeyStore");
}
return;
}
String[] parameterPairs = parameterString.split(";");
if (parameterPairs == null) {
if (log.isDebugEnabled()) {
log.debug("No additional parameter for KeyStore");
}
return;
}
for (String parameterPairString : parameterPairs) {
String[] values = parameterPairString.split("=");
if (values == null || values.length != 2) {
if (log.isDebugEnabled()) {
log.debug("A parameter with no (name,value) pair has been found ");
}
return;
}
information.addParameter(values[0], values[1]);
}
}
}