From 94e2135c845ed468bb2d55eab0f3901654100fe5 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 12 Aug 2015 10:47:38 +0000
Subject: [PATCH] Extracted methods to remove duplicated code
---
opendj-server-legacy/src/main/java/org/opends/server/extensions/FileBasedKeyManagerProvider.java | 458 +++++++++++++++++---------------------------------------
1 files changed, 139 insertions(+), 319 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/extensions/FileBasedKeyManagerProvider.java b/opendj-server-legacy/src/main/java/org/opends/server/extensions/FileBasedKeyManagerProvider.java
index ffd16f1..1baaff1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/extensions/FileBasedKeyManagerProvider.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/extensions/FileBasedKeyManagerProvider.java
@@ -96,107 +96,12 @@
configEntryDN = configuration.dn();
configuration.addFileBasedChangeListener(this);
- // Get the path to the key store file.
- keyStoreFile = configuration.getKeyStoreFile();
- try {
- File f = getFileForPath(keyStoreFile);
- if (!f.exists() || !f.isFile()) {
- throw new InitializationException(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(keyStoreFile, configEntryDN));
- }
- } catch (SecurityException e) {
- logger.traceException(e);
-
- LocalizableMessage message = ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
- configEntryDN, getExceptionMessage(e));
- throw new InitializationException(message, e);
- }
-
- // Get the keystore type. If none is specified, then use the
- // default type.
- if (configuration.getKeyStoreType() != null) {
- try {
- KeyStore.getInstance(configuration.getKeyStoreType());
- keyStoreType = configuration.getKeyStoreType();
- } catch (KeyStoreException kse) {
- logger.traceException(kse);
-
- LocalizableMessage message = ERR_FILE_KEYMANAGER_INVALID_TYPE.
- get(configuration.getKeyStoreType(), configEntryDN, getExceptionMessage(kse));
- throw new InitializationException(message);
- }
- } else {
- keyStoreType = KeyStore.getDefaultType();
- }
-
- // Get the PIN needed to access the contents of the keystore file.
- //
- // We will offer several places to look for the PIN, and we will
- // do so in the following order:
- //
- // - In a specified Java property
- // - In a specified environment variable
- // - In a specified file on the server filesystem.
- // - As the value of a configuration attribute.
- //
- // In any case, the PIN must be in the clear.
- keyStorePIN = null;
-
- if (configuration.getKeyStorePinProperty() != null) {
- String propertyName = configuration.getKeyStorePinProperty();
- String pinStr = System.getProperty(propertyName);
-
- if (pinStr == null) {
- LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
- propertyName, configEntryDN);
- throw new InitializationException(message);
- }
-
- keyStorePIN = pinStr.toCharArray();
- } else if (configuration.getKeyStorePinEnvironmentVariable() != null) {
- String enVarName = configuration
- .getKeyStorePinEnvironmentVariable();
- String pinStr = System.getenv(enVarName);
-
- if (pinStr == null) {
- LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
- enVarName, configEntryDN);
- throw new InitializationException(message);
- }
-
- keyStorePIN = pinStr.toCharArray();
- } else if (configuration.getKeyStorePinFile() != null) {
- String fileName = configuration.getKeyStorePinFile();
- File pinFile = getFileForPath(fileName);
-
- if (!pinFile.exists()) {
- LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
- fileName, configEntryDN);
- throw new InitializationException(message);
- }
-
- String pinStr = readPinFromFile(fileName, pinFile);
- if (pinStr == null) {
- LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(fileName, configEntryDN);
- throw new InitializationException(message);
- }
-
- keyStorePIN = pinStr.toCharArray();
- } else if (configuration.getKeyStorePin() != null) {
- keyStorePIN = configuration.getKeyStorePin().toCharArray();
- }
- }
-
- private String readPinFromFile(String fileName, File pinFile) throws InitializationException
- {
- try (BufferedReader br = new BufferedReader(new FileReader(pinFile)))
- {
- return br.readLine();
- }
- catch (IOException ioe)
- {
- LocalizableMessage message =
- ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.get(fileName, configEntryDN, getExceptionMessage(ioe));
- throw new InitializationException(message, ioe);
+ final ConfigChangeResult ccr = new ConfigChangeResult();
+ keyStoreFile = getKeyStoreFile(configuration, configEntryDN, ccr);
+ keyStoreType = getKeyStoreType(configuration, configEntryDN, ccr);
+ keyStorePIN = getKeyStorePIN(configuration, configEntryDN, ccr);
+ if (!ccr.getMessages().isEmpty()) {
+ throw new InitializationException(ccr.getMessages().get(0));
}
}
@@ -319,233 +224,23 @@
int startSize = unacceptableReasons.size();
DN cfgEntryDN = configuration.dn();
- // Get the path to the key store file.
- String newKeyStoreFile = configuration.getKeyStoreFile();
- try
- {
- File f = getFileForPath(newKeyStoreFile);
- if (!f.exists() || !f.isFile())
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(newKeyStoreFile, cfgEntryDN));
- }
- }
- catch (Exception e)
- {
- logger.traceException(e);
-
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(cfgEntryDN, getExceptionMessage(e)));
- }
-
- // Get the keystore type. If none is specified, then use the default type.
- if (configuration.getKeyStoreType() != null)
- {
- try
- {
- KeyStore.getInstance(configuration.getKeyStoreType());
- }
- catch (KeyStoreException kse)
- {
- logger.traceException(kse);
-
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_INVALID_TYPE.get(
- configuration.getKeyStoreType(), cfgEntryDN, getExceptionMessage(kse)));
- }
- }
-
- // Get the PIN needed to access the contents of the keystore file.
- //
- // We will offer several places to look for the PIN, and we will
- // do so in the following order:
- //
- // - In a specified Java property
- // - In a specified environment variable
- // - In a specified file on the server filesystem.
- // - As the value of a configuration attribute.
- //
- // In any case, the PIN must be in the clear.
- // It is acceptable to have no PIN (OPENDJ-18)
- if (configuration.getKeyStorePinProperty() != null)
- {
- String propertyName = configuration.getKeyStorePinProperty();
- String pinStr = System.getProperty(propertyName);
-
- if (pinStr == null)
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(propertyName, cfgEntryDN));
- }
- }
- else if (configuration.getKeyStorePinEnvironmentVariable() != null)
- {
- String enVarName = configuration.getKeyStorePinEnvironmentVariable();
- String pinStr = System.getenv(enVarName);
-
- if (pinStr == null)
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(enVarName, cfgEntryDN));
- }
- }
- else if (configuration.getKeyStorePinFile() != null)
- {
- String fileName = configuration.getKeyStorePinFile();
- File pinFile = getFileForPath(fileName);
-
- if (!pinFile.exists())
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(fileName, cfgEntryDN));
- }
- else
- {
- String pinStr = readPinFromFile(pinFile, fileName, cfgEntryDN, unacceptableReasons);
- if (pinStr == null)
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(fileName, cfgEntryDN));
- }
- }
- }
- else if (configuration.getKeyStorePin() != null)
- {
- String pinStr = configuration.getKeyStorePin();
- if (pinStr == null)
- {
- unacceptableReasons.add(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR.get(cfgEntryDN, null));
- }
- }
+ final ConfigChangeResult ccr = new ConfigChangeResult();
+ getKeyStoreFile(configuration, cfgEntryDN, ccr);
+ getKeyStoreType(configuration, cfgEntryDN, ccr);
+ getKeyStorePIN(configuration, cfgEntryDN, ccr);
+ unacceptableReasons.addAll(ccr.getMessages());
return startSize == unacceptableReasons.size();
}
- private String readPinFromFile(File pinFile, String fileName, DN cfgEntryDN,
- List<LocalizableMessage> unacceptableReasons)
- {
- try (BufferedReader br = new BufferedReader(new FileReader(pinFile)))
- {
- return br.readLine();
- }
- catch (IOException ioe)
- {
- unacceptableReasons.add(
- ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.get(fileName, cfgEntryDN, getExceptionMessage(ioe)));
- return null;
- }
- }
-
@Override
public ConfigChangeResult applyConfigurationChange(
FileBasedKeyManagerProviderCfg configuration)
{
final ConfigChangeResult ccr = new ConfigChangeResult();
-
- // Get the path to the key store file.
- String newKeyStoreFile = configuration.getKeyStoreFile();
- try
- {
- File f = getFileForPath(newKeyStoreFile);
- if (!f.exists() || !f.isFile())
- {
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(newKeyStoreFile, configEntryDN));
- }
- }
- catch (Exception e)
- {
- logger.traceException(e);
-
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
- configEntryDN, getExceptionMessage(e)));
- }
-
- // Get the keystore type. If none is specified, then use the default type.
- String newKeyStoreType = KeyStore.getDefaultType();
- if (configuration.getKeyStoreType() != null)
- {
- try
- {
- KeyStore.getInstance(configuration.getKeyStoreType());
- newKeyStoreType = configuration.getKeyStoreType();
- }
- catch (KeyStoreException kse)
- {
- logger.traceException(kse);
-
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_INVALID_TYPE.get(
- configuration.getKeyStoreType(), configEntryDN, getExceptionMessage(kse)));
- }
- }
-
- // Get the PIN needed to access the contents of the keystore file.
- //
- // We will offer several places to look for the PIN, and we will
- // do so in the following order:
- //
- // - In a specified Java property
- // - In a specified environment variable
- // - In a specified file on the server filesystem.
- // - As the value of a configuration attribute.
- //
- // In any case, the PIN must be in the clear.
- char[] newPIN = null;
-
- if (configuration.getKeyStorePinProperty() != null)
- {
- String propertyName = configuration.getKeyStorePinProperty();
- String pinStr = System.getProperty(propertyName);
-
- if (pinStr == null)
- {
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
- propertyName, configEntryDN));
- }
- else
- {
- newPIN = pinStr.toCharArray();
- }
- }
- else if (configuration.getKeyStorePinEnvironmentVariable() != null)
- {
- String enVarName = configuration.getKeyStorePinEnvironmentVariable();
- String pinStr = System.getenv(enVarName);
-
- if (pinStr == null)
- {
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(enVarName, configEntryDN));
- }
- else
- {
- newPIN = pinStr.toCharArray();
- }
- }
- else if (configuration.getKeyStorePinFile() != null)
- {
- String fileName = configuration.getKeyStorePinFile();
- File pinFile = getFileForPath(fileName);
-
- if (!pinFile.exists())
- {
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(fileName, configEntryDN));
- }
- else
- {
- String pinStr = readPinFromFile(pinFile, fileName, ccr);
- if (pinStr == null)
- {
- ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
- ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(fileName, configEntryDN));
- }
- else
- {
- newPIN = pinStr.toCharArray();
- }
- }
- }
- else if (configuration.getKeyStorePin() != null)
- {
- newPIN = configuration.getKeyStorePin().toCharArray();
- }
+ String newKeyStoreFile = getKeyStoreFile(configuration, configEntryDN, ccr);
+ String newKeyStoreType = getKeyStoreType(configuration, configEntryDN, ccr);
+ char[] newPIN = getKeyStorePIN(configuration, configEntryDN, ccr);
if (ccr.getResultCode() == ResultCode.SUCCESS)
{
@@ -558,6 +253,131 @@
return ccr;
}
+ /** Get the path to the key store file. */
+ private String getKeyStoreFile(FileBasedKeyManagerProviderCfg configuration, DN cfgEntryDN,
+ final ConfigChangeResult ccr)
+ {
+ String keyStoreFile = configuration.getKeyStoreFile();
+ try
+ {
+ File f = getFileForPath(keyStoreFile);
+ if (!f.exists() || !f.isFile())
+ {
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(keyStoreFile, cfgEntryDN));
+ }
+ }
+ catch (Exception e)
+ {
+ logger.traceException(e);
+
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(cfgEntryDN, getExceptionMessage(e)));
+ }
+ return keyStoreFile;
+ }
+
+ /** Get the keystore type. If none is specified, then use the default type. */
+ private String getKeyStoreType(FileBasedKeyManagerProviderCfg configuration, DN cfgEntryDN,
+ final ConfigChangeResult ccr)
+ {
+ if (configuration.getKeyStoreType() != null)
+ {
+ try
+ {
+ KeyStore.getInstance(configuration.getKeyStoreType());
+ return configuration.getKeyStoreType();
+ }
+ catch (KeyStoreException kse)
+ {
+ logger.traceException(kse);
+
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_INVALID_TYPE.get(
+ configuration.getKeyStoreType(), cfgEntryDN, getExceptionMessage(kse)));
+ }
+ }
+ return KeyStore.getDefaultType();
+ }
+
+ /**
+ * Get the PIN needed to access the contents of the keystore file.
+ * <p>
+ * We will offer several places to look for the PIN, and we will do so in the following order:
+ * <ol>
+ * <li>In a specified Java property</li>
+ * <li>In a specified environment variable</li>
+ * <li>In a specified file on the server filesystem</li>
+ * <li>As the value of a configuration attribute.</li>
+ * <ol>
+ * In any case, the PIN must be in the clear.
+ * <p>
+ * It is acceptable to have no PIN (OPENDJ-18)
+ */
+ private char[] getKeyStorePIN(FileBasedKeyManagerProviderCfg configuration, DN cfgEntryDN,
+ final ConfigChangeResult ccr)
+ {
+ if (configuration.getKeyStorePinProperty() != null)
+ {
+ String propertyName = configuration.getKeyStorePinProperty();
+ String pinStr = System.getProperty(propertyName);
+
+ if (pinStr == null)
+ {
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(propertyName, cfgEntryDN));
+ }
+ else
+ {
+ return pinStr.toCharArray();
+ }
+ }
+ else if (configuration.getKeyStorePinEnvironmentVariable() != null)
+ {
+ String enVarName = configuration.getKeyStorePinEnvironmentVariable();
+ String pinStr = System.getenv(enVarName);
+
+ if (pinStr == null)
+ {
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(enVarName, cfgEntryDN));
+ }
+ else
+ {
+ return pinStr.toCharArray();
+ }
+ }
+ else if (configuration.getKeyStorePinFile() != null)
+ {
+ String fileName = configuration.getKeyStorePinFile();
+ File pinFile = getFileForPath(fileName);
+
+ if (!pinFile.exists())
+ {
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(fileName, cfgEntryDN));
+ }
+ else
+ {
+ String pinStr = readPinFromFile(pinFile, fileName, ccr);
+ if (pinStr == null)
+ {
+ ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+ ccr.addMessage(ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(fileName, cfgEntryDN));
+ }
+ else
+ {
+ return pinStr.toCharArray();
+ }
+ }
+ }
+ else if (configuration.getKeyStorePin() != null)
+ {
+ return configuration.getKeyStorePin().toCharArray();
+ }
+ return null;
+ }
+
private String readPinFromFile(File pinFile, String fileName, ConfigChangeResult ccr)
{
try (BufferedReader br = new BufferedReader(new FileReader(pinFile)))
--
Gitblit v1.10.0