diff --git a/installation/resource/installer/bin/finish-installation.sh b/installation/resource/installer/bin/finish-installation.sh index 9de1717de2559215ab8b33ebed98d9f6bcb4095a..460b2d9298781a1e2426eacbca046ced179e9cf3 100644 --- a/installation/resource/installer/bin/finish-installation.sh +++ b/installation/resource/installer/bin/finish-installation.sh @@ -16,6 +16,7 @@ DSS_ROOT_DIR=$3 INSTALL_PATH=$4 DISABLED_TECHNOLOGIES=$5 +echo Finish installation... source $BASE/chmodx-all-scripts.sh diff --git a/installation/resource/installer/install.xml b/installation/resource/installer/install.xml index 88d7f944bef44965f6e94b3b32825eaf44f48d67..b12e70000cf8e38e1b5401ce162e05164b351a20 100644 --- a/installation/resource/installer/install.xml +++ b/installation/resource/installer/install.xml @@ -96,6 +96,12 @@ <validator classname="ch.systemsx.cisd.openbis.installer.izpack.PostgresToolsPathValidator"/> </panel> + <panel classname="com.izforge.izpack.panels.userinput.UserInputPanel" id="UserInputPanel.KEY_STORE" > + <actions> + <action stage="preactivate" classname="ch.systemsx.cisd.openbis.installer.izpack.KeystoreAction" /> + </actions> + </panel> + <panel classname="com.izforge.izpack.panels.userinput.UserInputPanel" id="UserInputPanel.TECHNOLOGIES" condition="isStandardTechnologies"> <actions> <action stage="preactivate" classname="ch.systemsx.cisd.openbis.installer.izpack.SetTechnologyCheckBoxesAction" /> diff --git a/installation/resource/installer/userInputSpec.xml b/installation/resource/installer/userInputSpec.xml index c0a926d789ba4b5eee61e12c3c14e37b53483402..cadca9dd8793e89842f6589180dd549aa0608f5d 100644 --- a/installation/resource/installer/userInputSpec.xml +++ b/installation/resource/installer/userInputSpec.xml @@ -8,6 +8,39 @@ </field> </panel> + <panel id="UserInputPanel.KEY_STORE"> + <field type="title" txt="Key Store" bold="true" size="2" /> + <field type="staticText" align="left" + txt="Please, select a new key store if the current one should be replace." /> + <field type="file" align="left" variable="KEY_STORE_FILE"> + <spec txt="Key store" size="20" set="" mustExist="true" allowEmptyValue="true" /> + </field> + <field type="staticText" align="left" + txt="Passwords need only be changed in case of a new key store with different password." /> + <field type="password" align="left" variable="KEY_STORE_PASSWORD"> + <spec> + <pwd txt="Key store password" size="20" set="" /> + <pwd txt="Re-type key store password" size="20" set=""/> + </spec> + <validator class="com.izforge.izpack.panels.userinput.validator.PasswordEqualityValidator" txt="The specified key store passwords do not match." /> + <validator class="com.izforge.izpack.panels.userinput.validator.RegularExpressionValidator" txt="Key store password cannot be empty."> + <param name="pattern" value="^.+$" /> + </validator> + </field> + <field type="password" align="left" variable="KEY_PASSWORD"> + <spec> + <pwd txt="Key password" size="20" set="" /> + <pwd txt="Re-type key password" size="20" set=""/> + </spec> + <validator class="com.izforge.izpack.panels.userinput.validator.PasswordEqualityValidator" txt="The specified key passwords do not match." /> + <validator class="com.izforge.izpack.panels.userinput.validator.RegularExpressionValidator" txt="key password cannot be empty."> + <param name="pattern" value="^.+$" /> + </validator> + </field> + + + </panel> + <panel id="UserInputPanel.TECHNOLOGIES"> <field type="title" txt="Technologies" bold="true" size="2" /> <field type="staticText" align="left" diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsAction.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsAction.java index b25bb379b885acf606fd967885883f99b626827f..3882b3544489c37e19ad1f0cf99b39ca59e8cf5e 100644 --- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsAction.java +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsAction.java @@ -19,18 +19,26 @@ package ch.systemsx.cisd.openbis.installer.izpack; import static ch.systemsx.cisd.openbis.installer.izpack.GlobalInstallationContext.ADMIN_PASSWORD_VARNAME; import static ch.systemsx.cisd.openbis.installer.izpack.GlobalInstallationContext.ETL_SERVER_PASSWORD_VARNAME; +import java.io.File; +import java.io.IOException; import java.util.HashMap; import java.util.Map; +import org.apache.commons.io.FileUtils; + import com.izforge.izpack.api.data.AutomatedInstallData; import com.izforge.izpack.api.data.PanelActionConfiguration; import com.izforge.izpack.api.handler.AbstractUIHandler; import com.izforge.izpack.data.PanelAction; +import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; + /** - * Executes a script that configures the installation. + * Executes a script that configures the installation, copies key store (if specified) and inject + * passwords. * * @author Kaloyan Enimanev + * @author Franz-Josef Elmer */ public class ExecuteSetupScriptsAction extends AbstractScriptExecutor implements PanelAction { @@ -53,8 +61,62 @@ public class ExecuteSetupScriptsAction extends AbstractScriptExecutor implements { executRestoreConfigScript(data); } + String keyStoreFileName = + data.getVariable(GlobalInstallationContext.KEY_STORE_FILE_VARNAME); + String keyStorePassword = + data.getVariable(GlobalInstallationContext.KEY_STORE_PASSWORD_VARNAME); + String certificatePassword = + data.getVariable(GlobalInstallationContext.KEY_PASSWORD_VARNAME); + File installDir = GlobalInstallationContext.installDir; + installKeyStore(keyStoreFileName, installDir); + injectPasswords(keyStorePassword, certificatePassword, installDir); } + void installKeyStore(String keyStoreFileName, File installDir) + { + if (keyStoreFileName != null && keyStoreFileName.length() > 0) + { + try + { + File keyStoreFile = new File(keyStoreFileName); + File keystoreFileAS = new File(installDir, Utils.AS_PATH + Utils.KEYSTORE_PATH); + FileUtils.copyFile(keyStoreFile, keystoreFileAS); + File keystoreFileDSS = new File(installDir, Utils.DSS_PATH + Utils.KEYSTORE_PATH); + FileUtils.copyFile(keyStoreFile, keystoreFileDSS); + } catch (IOException ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } + } + } + + void injectPasswords(String keyStorePassword, String keyPassword, File installDir) + { + File dssServicePropertiesFile = + new File(installDir, Utils.DSS_PATH + Utils.SERVICE_PROPERTIES_PATH); + Utils.updateOrAppendProperty(dssServicePropertiesFile, Utils.DSS_KEYSTORE_PASSWORD_KEY, + keyStorePassword); + Utils.updateOrAppendProperty(dssServicePropertiesFile, Utils.DSS_KEYSTORE_KEY_PASSWORD_KEY, + keyPassword); + + File jettyXMLFile = new File(installDir, Utils.AS_PATH + Utils.JETTY_XML_PATH); + try + { + String jettyXML = FileUtils.readFileToString(jettyXMLFile); + jettyXML = + jettyXML.replaceAll("<Set name=\"Password\">.*</Set>", + "<Set name=\"Password\"><![CDATA[" + keyStorePassword + "]]></Set>") + .replaceAll( + "<Set name=\"KeyPassword\">.*</Set>", + "<Set name=\"KeyPassword\"><![CDATA[" + keyPassword + + "]]></Set>"); + FileUtils.writeStringToFile(jettyXMLFile, jettyXML); + } catch (IOException ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } + } + private void executRestoreConfigScript(AutomatedInstallData data) { String script = getAdminScript(data, RESTORE_CONFIG_FROM_BACKUP_SCRIPT); diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/GlobalInstallationContext.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/GlobalInstallationContext.java index 3f1f32580b99be6b06b96a92427cf49af6ced70b..f7d8372167f0cd1ac23337fc32a23cd6bdd9796e 100644 --- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/GlobalInstallationContext.java +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/GlobalInstallationContext.java @@ -33,6 +33,12 @@ public class GlobalInstallationContext public static final String ETL_SERVER_PASSWORD_VARNAME = "ETLSERVER_PASSWORD"; + public static final String KEY_STORE_FILE_VARNAME = "KEY_STORE_FILE"; + + public static final String KEY_STORE_PASSWORD_VARNAME = "KEY_STORE_PASSWORD"; + + public static final String KEY_PASSWORD_VARNAME = "KEY_PASSWORD"; + public static final String DATA_DIR_VARNAME = "DSS_ROOT_DIR"; public static final String BACKUP_FOLDER_VARNAME = "BACKUP_FOLDER"; diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeystoreAction.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeystoreAction.java new file mode 100644 index 0000000000000000000000000000000000000000..642cfc1eb620dbd3be9753bbb51607571a4e4774 --- /dev/null +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeystoreAction.java @@ -0,0 +1,56 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed 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 ch.systemsx.cisd.openbis.installer.izpack; + +import com.izforge.izpack.api.data.AutomatedInstallData; +import com.izforge.izpack.api.data.PanelActionConfiguration; +import com.izforge.izpack.api.handler.AbstractUIHandler; +import com.izforge.izpack.data.PanelAction; + +/** + * Action which extracts the passwords from DSS service.properties to fill the passwords in page for + * key store. + * + * @author Franz-Josef Elmer + */ +public class KeystoreAction implements PanelAction +{ + + private static final String DEFAULT_PASSWORD = "changeit"; + private static final String DEFAULT_KEY_PASSWORD = "changeit"; + + public void initialize(PanelActionConfiguration configuration) + { + } + + public void executeAction(AutomatedInstallData data, AbstractUIHandler handler) + { + data.setVariable(GlobalInstallationContext.KEY_STORE_PASSWORD_VARNAME, + getDssServiceProperty(Utils.DSS_KEYSTORE_PASSWORD_KEY, DEFAULT_PASSWORD)); + data.setVariable(GlobalInstallationContext.KEY_PASSWORD_VARNAME, + getDssServiceProperty(Utils.DSS_KEYSTORE_KEY_PASSWORD_KEY, DEFAULT_KEY_PASSWORD)); + } + + public String getDssServiceProperty(String propertyKey, String defaultValue) + { + String property = + Utils.tryToGetServicePropertyOfDSS(GlobalInstallationContext.installDir, + propertyKey); + return property == null ? defaultValue : property; + } + +} diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java index 0a38f546e0ec57d0318f3fa6a639d16b102843c4..237f6e40f225f6b991ed03ad5d5f0abb410ff599 100644 --- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java @@ -19,15 +19,11 @@ package ch.systemsx.cisd.openbis.installer.izpack; import static ch.systemsx.cisd.openbis.installer.izpack.SetTechnologyCheckBoxesAction.DISABLED_TECHNOLOGIES_KEY; import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import org.apache.commons.io.IOUtils; import com.izforge.izpack.api.data.AutomatedInstallData; import com.izforge.izpack.api.data.PanelActionConfiguration; @@ -67,44 +63,11 @@ public class SetDisableTechnologiesVariableAction implements PanelAction if (isFirstTimeInstallation == false) { File configFile = new File(installDir, Utils.AS_PATH + Utils.SERVICE_PROPERTIES_PATH); - List<String> list = FileUtilities.loadToStringList(configFile); - boolean defined = false; - boolean unchanged = false; - String propertiesEntry = DISABLED_TECHNOLOGIES_KEY + " = " + newTechnologyList; - for (int i = 0; i < list.size(); i++) - { - String line = list.get(i); - if (line.startsWith(DISABLED_TECHNOLOGIES_KEY)) - { - defined = true; - String currentTechnologyList = - line.substring(DISABLED_TECHNOLOGIES_KEY.length()).trim(); - if (currentTechnologyList.startsWith("=")) - { - currentTechnologyList = currentTechnologyList.substring(1).trim(); - } - unchanged = currentTechnologyList.equals(newTechnologyList); - if (unchanged == false) - { - list.set(i, propertiesEntry); - } - break; - } - } - if (defined) - { - if (unchanged == false) - { - updateConfigFile(configFile, list); - } - } else - { - appendEntryToConfigFile(configFile, propertiesEntry); - } + Utils.updateOrAppendProperty(configFile, DISABLED_TECHNOLOGIES_KEY, newTechnologyList); updateDisabledDssPluginsProperty(data, installDir); } } - + private void updateDisabledDssPluginsProperty(AutomatedInstallData data, File installDir) { Set<String> disabledTechnologies = new LinkedHashSet<String>(); @@ -121,7 +84,7 @@ public class SetDisableTechnologiesVariableAction implements PanelAction File configFile = new File(installDir, Utils.DSS_PATH + Utils.SERVICE_PROPERTIES_PATH); List<String> list = FileUtilities.loadToStringList(configFile); updateDisabledDssPluginsProperty(list, technologies, disabledTechnologies); - updateConfigFile(configFile, list); + Utils.updateConfigFile(configFile, list); } private void updateDisabledDssPluginsProperty(List<String> list, Set<String> technologies, @@ -187,42 +150,4 @@ public class SetDisableTechnologiesVariableAction implements PanelAction return builder.toString(); } - private void updateConfigFile(File configFile, List<String> list) - { - PrintWriter printWriter = null; - try - { - printWriter = new PrintWriter(configFile); - for (String line : list) - { - printWriter.println(line); - } - } catch (IOException ex) - { - throw new RuntimeException("Couldn't update " + configFile, ex); - } finally - { - IOUtils.closeQuietly(printWriter); - } - } - - private void appendEntryToConfigFile(File configFile, String propertiesEntry) - { - FileWriter fileWriter = null; - try - { - fileWriter = new FileWriter(configFile, true); - PrintWriter printWriter = new PrintWriter(fileWriter); - printWriter.println(); - printWriter.println(propertiesEntry); - } catch (IOException ex) - { - throw new RuntimeException("Couldn't append property " + DISABLED_TECHNOLOGIES_KEY - + " to " + configFile, ex); - } finally - { - IOUtils.closeQuietly(fileWriter); - } - } - } diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/Utils.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/Utils.java index 71a70bdcd7850d820a1e8d7186a262ebad8a1091..7116eef439709e697900212a7ad489d0408eaecc 100644 --- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/Utils.java +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/Utils.java @@ -16,13 +16,21 @@ package ch.systemsx.cisd.openbis.installer.izpack; +import static ch.systemsx.cisd.openbis.installer.izpack.SetTechnologyCheckBoxesAction.DISABLED_TECHNOLOGIES_KEY; + import java.io.File; import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; import java.util.Map.Entry; import java.util.Properties; import org.apache.commons.io.IOUtils; +import ch.systemsx.cisd.common.filesystem.FileUtilities; + /** * Utility functions for exploring <code>service.properties</code> files of an installation. * @@ -34,6 +42,8 @@ class Utils static final String AS_PATH = SERVERS_PATH + "openBIS-server/jetty/"; static final String DSS_PATH = SERVERS_PATH + "datastore_server/"; static final String SERVICE_PROPERTIES_PATH = "etc/service.properties"; + static final String JETTY_XML_PATH = "etc/jetty.xml"; + static final String KEYSTORE_PATH = "etc/openBIS.keystore"; static String tryToGetServicePropertyOfAS(File installDir, String propertyKey) { @@ -41,6 +51,12 @@ class Utils return serviceProperties == null ? null : serviceProperties.getProperty(propertyKey); } + static String tryToGetServicePropertyOfDSS(File installDir, String propertyKey) + { + Properties serviceProperties = tryToGetServicePropertiesOfDSS(installDir); + return serviceProperties == null ? null : serviceProperties.getProperty(propertyKey); + } + static boolean dssPropertiesContains(File installDir, String string) { Properties properties = @@ -70,6 +86,11 @@ class Utils return tryToGetServiceProperties(installDir, AS_PATH + SERVICE_PROPERTIES_PATH); } + private static Properties tryToGetServicePropertiesOfDSS(File installDir) + { + return tryToGetServiceProperties(installDir, DSS_PATH + SERVICE_PROPERTIES_PATH); + } + private static Properties tryToGetServiceProperties(File installDir, String relativePath) { Properties properties = new Properties(); @@ -87,4 +108,83 @@ class Utils IOUtils.closeQuietly(fileReader); } } + + static void updateConfigFile(File configFile, List<String> list) + { + PrintWriter printWriter = null; + try + { + printWriter = new PrintWriter(configFile); + for (String line : list) + { + printWriter.println(line); + } + } catch (IOException ex) + { + throw new RuntimeException("Couldn't update " + configFile, ex); + } finally + { + IOUtils.closeQuietly(printWriter); + } + } + + static void appendEntryToConfigFile(File configFile, String propertiesEntry) + { + FileWriter fileWriter = null; + try + { + fileWriter = new FileWriter(configFile, true); + PrintWriter printWriter = new PrintWriter(fileWriter); + printWriter.println(); + printWriter.println(propertiesEntry); + } catch (IOException ex) + { + throw new RuntimeException("Couldn't append property " + DISABLED_TECHNOLOGIES_KEY + + " to " + configFile, ex); + } finally + { + IOUtils.closeQuietly(fileWriter); + } + } + + static void updateOrAppendProperty(File configFile, String propertyKey, String propertyValue) + { + List<String> list = FileUtilities.loadToStringList(configFile); + boolean defined = false; + boolean unchanged = false; + String propertiesEntry = propertyKey + " = " + propertyValue; + for (int i = 0; i < list.size(); i++) + { + String line = list.get(i); + if (line.startsWith(propertyKey)) + { + defined = true; + String currentPropertyValue = + line.substring(propertyKey.length()).trim(); + if (currentPropertyValue.startsWith("=")) + { + currentPropertyValue = currentPropertyValue.substring(1).trim(); + } + unchanged = currentPropertyValue.equals(propertyValue); + if (unchanged == false) + { + list.set(i, propertiesEntry); + } + break; + } + } + if (defined) + { + if (unchanged == false) + { + updateConfigFile(configFile, list); + } + } else + { + appendEntryToConfigFile(configFile, propertiesEntry); + } + } + + static final String DSS_KEYSTORE_KEY_PASSWORD_KEY = "keystore.key-password"; + static final String DSS_KEYSTORE_PASSWORD_KEY = "keystore.password"; } diff --git a/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsActionTest.java b/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsActionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9ae9b63ba891857c0d1bc42dd4506ee952a474d1 --- /dev/null +++ b/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/ExecuteSetupScriptsActionTest.java @@ -0,0 +1,126 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed 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 ch.systemsx.cisd.openbis.installer.izpack; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase; +import ch.systemsx.cisd.common.filesystem.FileUtilities; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class ExecuteSetupScriptsActionTest extends AbstractFileSystemTestCase +{ + private File dssServicePropertiesFile; + private File jettyXMLFile; + private ExecuteSetupScriptsAction action; + private File myKeystoreFile; + private File keystoreFileAS; + private File keystoreFileDSS; + + @BeforeMethod + public void setUpFiles() throws IOException + { + dssServicePropertiesFile = + new File(workingDirectory, Utils.DSS_PATH + Utils.SERVICE_PROPERTIES_PATH); + jettyXMLFile = new File(workingDirectory, Utils.AS_PATH + Utils.JETTY_XML_PATH); + FileUtils.copyFile(new File("../datastore_server/dist/etc/service.properties/"), + dssServicePropertiesFile); + FileUtils.copyFile(new File("../openbis/dist/server/jetty.xml/"), jettyXMLFile); + + keystoreFileAS = new File(workingDirectory, Utils.AS_PATH + Utils.KEYSTORE_PATH); + keystoreFileDSS = new File(workingDirectory, Utils.DSS_PATH + Utils.KEYSTORE_PATH); + myKeystoreFile = new File(workingDirectory, "my-keystore"); + FileUtils.writeStringToFile(myKeystoreFile, "my-keys"); + action = new ExecuteSetupScriptsAction(); + } + + @Test + public void testInstallKeyStoreWithUndefinedKeyStoreFileName() throws Exception + { + action.installKeyStore("", workingDirectory); + + assertEquals(false, keystoreFileAS.exists()); + assertEquals(false, keystoreFileDSS.exists()); + } + + @Test + public void testInstallKeyStoreWithKeyStoreFileName() throws Exception + { + action.installKeyStore(myKeystoreFile.getPath(), workingDirectory); + + assertEquals(true, keystoreFileAS.exists()); + assertEquals("my-keys", FileUtils.readFileToString(keystoreFileAS)); + assertEquals(true, keystoreFileDSS.exists()); + assertEquals("my-keys", FileUtils.readFileToString(keystoreFileDSS)); + } + + @Test + public void testInjectPasswords() throws Exception + { + action.injectPasswords("my-<store>", "my-<key>", workingDirectory); + + Properties properties = loadProperties(dssServicePropertiesFile); + assertEquals("my-<store>", properties.getProperty(Utils.DSS_KEYSTORE_PASSWORD_KEY)); + assertEquals("my-<key>", properties.getProperty(Utils.DSS_KEYSTORE_KEY_PASSWORD_KEY)); + assertEquals("[<Set name=\"Password\"><![CDATA[my-<store>]]></Set>, " + + "<Set name=\"KeyPassword\"><![CDATA[my-<key>]]></Set>]", + loadFilteredAndTrimmedJettyXMLFile().toString()); + } + + public List<String> loadFilteredAndTrimmedJettyXMLFile() + { + List<String> lines = FileUtilities.loadToStringList(jettyXMLFile); + List<String> result = new ArrayList<String>(); + for (String line : lines) + { + if (line.indexOf("Password") > 0) + { + result.add(line.trim()); + } + } + return result; + } + + public Properties loadProperties(File propertiesFile) throws Exception + { + Properties properties = new Properties(); + FileReader fileReader = null; + try + { + fileReader = new FileReader(propertiesFile); + properties.load(fileReader); + } finally + { + IOUtils.closeQuietly(fileReader); + } + return properties; + } +}