diff options
author | 2020-09-10 22:03:53 +0200 | |
---|---|---|
committer | 2020-09-14 10:57:59 +0200 | |
commit | 9f597ecbf18bbda75317926c35066b9571736054 (patch) | |
tree | c524613ee646d5d8bf482df6172a83b021cbdd46 /trustStoreMerger/src/main/java/org | |
parent | 4ad0fafc796a7b65b9d653863d0f57a62eca5fa9 (diff) |
[OOM-CPMv2] Allow optional input parameters
Bug fix in merger to allow KEYSTORE paths to be optional.
Issue-ID: DCAEGEN2-2253
Signed-off-by: kjaniak <kornel.janiak@nokia.com>
Change-Id: I9176d7fdb0e714d849a4ea617ccc4f8eb6a233e1
Diffstat (limited to 'trustStoreMerger/src/main/java/org')
11 files changed, 104 insertions, 122 deletions
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java index 01f440cc..2c3945c5 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java @@ -22,8 +22,8 @@ package org.onap.oom.truststoremerger.api; public enum ExitStatus { SUCCESS(0, "Success"), - TRUSTSTORES_PATHS_PROVIDER_EXCEPTION(1, "Invalid paths in environment variables"), - MERGER_CONFIGURATION_EXCEPTION(2, "Invalid merger configuration"), + CERTIFICATES_PATHS_VALIDATION_EXCEPTION(1, "Invalid paths in environment variables"), + CONFIGURATION_EXCEPTION(2, "Invalid merger configuration"), TRUSTSTORE_FILE_FACTORY_EXCEPTION(3, "Invalid truststore file-password pair"), PASSWORD_READER_EXCEPTION(4, "Cannot read password from file"), CREATE_BACKUP_EXCEPTION(5, "Cannot create backup file"), diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationLoader.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationLoader.java index 7660ff7b..0f538e1d 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationLoader.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationLoader.java @@ -21,22 +21,14 @@ package org.onap.oom.truststoremerger.configuration; import org.onap.oom.truststoremerger.api.ExitableException; import org.onap.oom.truststoremerger.configuration.model.AppConfiguration; -import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsReader; -import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsReaderFactory; -import org.onap.oom.truststoremerger.configuration.path.env.EnvProvider; +import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsSplitter; +import org.onap.oom.truststoremerger.configuration.path.env.EnvReader; public class AppConfigurationLoader { public AppConfiguration loadConfiguration() throws ExitableException { - DelimitedPathsReaderFactory readerFactory = new DelimitedPathsReaderFactory(new EnvProvider()); - DelimitedPathsReader certificatesPathsReader = readerFactory.createCertificatePathsReader(); - DelimitedPathsReader passwordsPathsReader = readerFactory.createPasswordPathsReader(); - DelimitedPathsReader copierPathsReader = readerFactory.createKeystoreCopierPathsReader(); - AppConfigurationProvider factory = new AppConfigurationProvider(certificatesPathsReader, - passwordsPathsReader, - copierPathsReader); + DelimitedPathsSplitter pathsSplitter = new DelimitedPathsSplitter(); + AppConfigurationProvider factory = new AppConfigurationProvider(pathsSplitter, new EnvReader()); return factory.createConfiguration(); } - - } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationProvider.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationProvider.java index e1bdbfa3..33ea8e4b 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationProvider.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/AppConfigurationProvider.java @@ -19,51 +19,65 @@ package org.onap.oom.truststoremerger.configuration; -import static org.onap.oom.truststoremerger.configuration.ConfigurationEnvs.KEYSTORE_DESTINATION_PATHS_ENV; -import static org.onap.oom.truststoremerger.configuration.ConfigurationEnvs.KEYSTORE_SOURCE_PATHS_ENV; -import static org.onap.oom.truststoremerger.configuration.ConfigurationEnvs.TRUSTSTORES_PATHS_ENV; -import static org.onap.oom.truststoremerger.configuration.ConfigurationEnvs.TRUSTSTORES_PASSWORDS_PATHS_ENV; +import static org.onap.oom.truststoremerger.configuration.model.EnvVariable.KEYSTORE_DESTINATION_PATHS_ENV; +import static org.onap.oom.truststoremerger.configuration.model.EnvVariable.KEYSTORE_SOURCE_PATHS_ENV; +import static org.onap.oom.truststoremerger.configuration.model.EnvVariable.TRUSTSTORES_PASSWORDS_PATHS_ENV; +import static org.onap.oom.truststoremerger.configuration.model.EnvVariable.TRUSTSTORES_PATHS_ENV; + +import java.util.Collections; import java.util.List; -import org.onap.oom.truststoremerger.configuration.exception.MergerConfigurationException; -import org.onap.oom.truststoremerger.configuration.exception.TruststoresPathsProviderException; +import java.util.Optional; +import org.onap.oom.truststoremerger.configuration.exception.CertificatesPathsValidationException; +import org.onap.oom.truststoremerger.configuration.exception.ConfigurationException; import org.onap.oom.truststoremerger.configuration.model.AppConfiguration; -import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsReader; +import org.onap.oom.truststoremerger.configuration.model.EnvVariable; +import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsSplitter; +import org.onap.oom.truststoremerger.configuration.path.env.EnvReader; public class AppConfigurationProvider { - private final DelimitedPathsReader truststoresPathsReader; - private final DelimitedPathsReader truststoresPasswordsPathsReader; - private final DelimitedPathsReader copierPathsReader; + private final EnvReader envReader; + private final DelimitedPathsSplitter pathsSplitter; - public AppConfigurationProvider(DelimitedPathsReader truststoresPathsReader, - DelimitedPathsReader truststoresPasswordsPathsReader, DelimitedPathsReader copierPathsReader) { - this.truststoresPathsReader = truststoresPathsReader; - this.truststoresPasswordsPathsReader = truststoresPasswordsPathsReader; - this.copierPathsReader = copierPathsReader; + public AppConfigurationProvider(DelimitedPathsSplitter pathsSplitter, EnvReader envReader) { + this.envReader = envReader; + this.pathsSplitter = pathsSplitter; } public AppConfiguration createConfiguration() - throws MergerConfigurationException, TruststoresPathsProviderException { - List<String> truststoresPaths = truststoresPathsReader.get(TRUSTSTORES_PATHS_ENV); - List<String> truststoresPasswordsPaths = truststoresPasswordsPathsReader.get(TRUSTSTORES_PASSWORDS_PATHS_ENV); - List<String> sourceKeystorePaths = copierPathsReader.get(KEYSTORE_SOURCE_PATHS_ENV); - List<String> destinationKeystorePaths = copierPathsReader.get(KEYSTORE_DESTINATION_PATHS_ENV); + throws ConfigurationException, CertificatesPathsValidationException { + + List<String> truststoresPaths = getPaths(TRUSTSTORES_PATHS_ENV); + List<String> truststoresPasswordsPaths = getPaths(TRUSTSTORES_PASSWORDS_PATHS_ENV); + List<String> sourceKeystorePaths = getPaths(KEYSTORE_SOURCE_PATHS_ENV); + List<String> destinationKeystorePaths = getPaths(KEYSTORE_DESTINATION_PATHS_ENV); - ensureSameSize(truststoresPaths, truststoresPasswordsPaths, TRUSTSTORES_PATHS_ENV, - TRUSTSTORES_PASSWORDS_PATHS_ENV); - ensureSameSize(sourceKeystorePaths, destinationKeystorePaths, KEYSTORE_SOURCE_PATHS_ENV, - KEYSTORE_DESTINATION_PATHS_ENV); + ensureSameSize(truststoresPaths, truststoresPasswordsPaths, TRUSTSTORES_PATHS_ENV.name(), + TRUSTSTORES_PASSWORDS_PATHS_ENV.name()); + ensureSameSize(sourceKeystorePaths, destinationKeystorePaths, KEYSTORE_SOURCE_PATHS_ENV.name(), + KEYSTORE_DESTINATION_PATHS_ENV.name()); return new AppConfiguration(truststoresPaths, truststoresPasswordsPaths, sourceKeystorePaths, destinationKeystorePaths); } + private List<String> getPaths(EnvVariable envVariable) throws ConfigurationException { + Optional<String> envValue = envReader.getEnv(envVariable.name()); + isMandatoryEnvPresent(envVariable, envValue); + return envValue.isPresent() ? pathsSplitter.getValidatedPaths(envVariable, envValue) : Collections.emptyList(); + } + + private void isMandatoryEnvPresent(EnvVariable envVariable, Optional<String> envValue) { + if (envVariable.isMandatory() && envValue.isEmpty()) { + throw new ConfigurationException(envVariable + " mandatory environment variable is not defined"); + } + } + private void ensureSameSize(List<String> firstList, List<String> secondList, String firstListEnvName, - String secondListEnvName) - throws MergerConfigurationException { + String secondListEnvName) throws ConfigurationException { if (firstList.size() != secondList.size()) { - throw new MergerConfigurationException( + throw new ConfigurationException( "Size of " + firstListEnvName + " does not match size of " + secondListEnvName + " environment variables"); } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/ConfigurationEnvs.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/ConfigurationEnvs.java deleted file mode 100644 index fa72e4b0..00000000 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/ConfigurationEnvs.java +++ /dev/null @@ -1,33 +0,0 @@ -/*============LICENSE_START======================================================= - * oom-truststore-merger - * ================================================================================ - * Copyright (C) 2020 Nokia. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.oom.truststoremerger.configuration; - -public final class ConfigurationEnvs { - - private ConfigurationEnvs() { - - } - - public static final String TRUSTSTORES_PATHS_ENV = "TRUSTSTORES_PATHS"; - public static final String TRUSTSTORES_PASSWORDS_PATHS_ENV = "TRUSTSTORES_PASSWORDS_PATHS"; - public static final String KEYSTORE_SOURCE_PATHS_ENV = "KEYSTORE_SOURCE_PATHS"; - public static final String KEYSTORE_DESTINATION_PATHS_ENV = "KEYSTORE_DESTINATION_PATHS"; - -} diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/TruststoresPathsProviderException.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/CertificatesPathsValidationException.java index 6089d314..1069a0fe 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/TruststoresPathsProviderException.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/CertificatesPathsValidationException.java @@ -22,9 +22,9 @@ package org.onap.oom.truststoremerger.configuration.exception; import org.onap.oom.truststoremerger.api.ExitStatus; import org.onap.oom.truststoremerger.api.ExitableException; -public class TruststoresPathsProviderException extends ExitableException { +public class CertificatesPathsValidationException extends ExitableException { - public TruststoresPathsProviderException(String errorMessage) { - super(errorMessage, ExitStatus.TRUSTSTORES_PATHS_PROVIDER_EXCEPTION); + public CertificatesPathsValidationException(String errorMessage) { + super(errorMessage, ExitStatus.CERTIFICATES_PATHS_VALIDATION_EXCEPTION); } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/MergerConfigurationException.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/ConfigurationException.java index 4bdfd9f4..ffb99dae 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/MergerConfigurationException.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/exception/ConfigurationException.java @@ -22,9 +22,9 @@ package org.onap.oom.truststoremerger.configuration.exception; import org.onap.oom.truststoremerger.api.ExitStatus; import org.onap.oom.truststoremerger.api.ExitableException; -public class MergerConfigurationException extends ExitableException { +public class ConfigurationException extends ExitableException { - public MergerConfigurationException(String errorMessage) { - super(errorMessage, ExitStatus.MERGER_CONFIGURATION_EXCEPTION); + public ConfigurationException(String errorMessage) { + super(errorMessage, ExitStatus.CONFIGURATION_EXCEPTION); } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsReaderFactory.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/model/EnvVariable.java index b2a64f97..456c58f8 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsReaderFactory.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/model/EnvVariable.java @@ -17,30 +17,35 @@ * ============LICENSE_END========================================================= */ -package org.onap.oom.truststoremerger.configuration.path; +package org.onap.oom.truststoremerger.configuration.model; import static org.onap.oom.truststoremerger.configuration.path.validation.ValidationFunctions.doesItContainValidCertificatesPaths; import static org.onap.oom.truststoremerger.configuration.path.validation.ValidationFunctions.doesItContainValidPasswordPaths; import static org.onap.oom.truststoremerger.configuration.path.validation.ValidationFunctions.doesItContainValidPathsToCopy; -import org.onap.oom.truststoremerger.configuration.path.env.EnvProvider; +import java.util.List; +import java.util.function.Predicate; -public final class DelimitedPathsReaderFactory { - private final EnvProvider envProvider; +public enum EnvVariable { + TRUSTSTORES_PATHS_ENV(true, doesItContainValidCertificatesPaths()), + TRUSTSTORES_PASSWORDS_PATHS_ENV(true, doesItContainValidPasswordPaths()), + KEYSTORE_SOURCE_PATHS_ENV(false, doesItContainValidPathsToCopy()), + KEYSTORE_DESTINATION_PATHS_ENV(false, doesItContainValidPathsToCopy()); - public DelimitedPathsReaderFactory(EnvProvider envProvider) { - this.envProvider = envProvider; - } + boolean isMandatory; + + Predicate<List<String>> validationFunction; - public DelimitedPathsReader createPasswordPathsReader() { - return new DelimitedPathsReader(envProvider, doesItContainValidPasswordPaths()); + EnvVariable(boolean isMandatory, Predicate<List<String>> validationFunction) { + this.isMandatory = isMandatory; + this.validationFunction = validationFunction; } - public DelimitedPathsReader createCertificatePathsReader() { - return new DelimitedPathsReader(envProvider, doesItContainValidCertificatesPaths()); + public boolean isMandatory() { + return isMandatory; } - public DelimitedPathsReader createKeystoreCopierPathsReader() { - return new DelimitedPathsReader(envProvider, doesItContainValidPathsToCopy()); + public Predicate<List<String>> getValidationFunction() { + return validationFunction; } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsReader.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsSplitter.java index e5de4d08..b7a4f4c5 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsReader.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/DelimitedPathsSplitter.java @@ -21,30 +21,22 @@ package org.onap.oom.truststoremerger.configuration.path; import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; -import org.onap.oom.truststoremerger.configuration.exception.TruststoresPathsProviderException; -import org.onap.oom.truststoremerger.configuration.path.env.EnvProvider; +import java.util.Optional; +import org.onap.oom.truststoremerger.configuration.exception.CertificatesPathsValidationException; +import org.onap.oom.truststoremerger.configuration.model.EnvVariable; -public class DelimitedPathsReader { +public class DelimitedPathsSplitter { private static final String DELIMITER = ":"; private static final int NEGATIVE_SPLIT_LIMIT = -1; - private final EnvProvider envProvider; - private final Predicate<List<String>> pathsValidator; - - DelimitedPathsReader(EnvProvider envProvider, Predicate<List<String>> pathsValidator) { - this.envProvider = envProvider; - this.pathsValidator = pathsValidator; - } - - public List<String> get(String envName) throws TruststoresPathsProviderException { - return envProvider.getEnv(envName) - .filter(this::hasValue) + public List<String> getValidatedPaths(EnvVariable envVariable, Optional<String> envValue) + throws CertificatesPathsValidationException { + return envValue.filter(this::hasValue) .map(this::splitToList) - .filter(pathsValidator) - .orElseThrow(() -> new TruststoresPathsProviderException( - envName + " environment variable does not contain valid paths")); + .filter(envVariable.getValidationFunction()) + .orElseThrow(() -> new CertificatesPathsValidationException( + envVariable + " environment variable does not contain valid paths")); } private boolean hasValue(String envValue) { diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/env/EnvProvider.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/env/EnvReader.java index 1dd127d0..cb6099c1 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/env/EnvProvider.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/env/EnvReader.java @@ -20,17 +20,20 @@ package org.onap.oom.truststoremerger.configuration.path.env; import java.util.Optional; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class EnvProvider { +public class EnvReader { - private static final Logger LOGGER = LoggerFactory.getLogger(EnvProvider.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EnvReader.class); public Optional<String> getEnv(String name) { + return getSystemEnv(name); + } + + Optional<String> getSystemEnv(String name) { String value = System.getenv(name); LOGGER.info("Read variable: {} , value: {}", name, value); - return Optional.ofNullable(System.getenv(name)); + return Optional.ofNullable(value); } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/validation/ValidationFunctions.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/validation/ValidationFunctions.java index f4cfa60c..535d2e6e 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/validation/ValidationFunctions.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/path/validation/ValidationFunctions.java @@ -25,7 +25,7 @@ import java.util.function.Predicate; public final class ValidationFunctions { private static final String CERTIFICATE_PATH_REGEX = "^(/[a-zA-Z0-9_-]+)+\\.(pem|jks|p12)"; - private static final String TRUSTSTORE_PASSWORD_PATH_REGEX = "^(/[a-zA-Z0-9_-]+)+\\.pass"; + private static final String CERTIFICATE_PASSWORD_PATH_REGEX = "^(/[a-zA-Z0-9_-]+)+\\.pass"; private ValidationFunctions() { } @@ -40,7 +40,7 @@ public final class ValidationFunctions { public static Predicate<List<String>> doesItContainValidPathsToCopy() { return paths -> paths.stream().allMatch(path -> - doesMatch(path, TRUSTSTORE_PASSWORD_PATH_REGEX) || isCertificatePathValid(path)); + doesMatch(path, CERTIFICATE_PASSWORD_PATH_REGEX) || isCertificatePathValid(path)); } private static boolean isCertificatePathValid(String path) { @@ -48,7 +48,7 @@ public final class ValidationFunctions { } private static boolean isCertificatePasswordPathValid(String path) { - return path.isEmpty() || doesMatch(path, TRUSTSTORE_PASSWORD_PATH_REGEX); + return path.isEmpty() || doesMatch(path, CERTIFICATE_PASSWORD_PATH_REGEX); } private static boolean doesMatch(String path, String regex) { diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/copier/KeystoreCopier.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/copier/KeystoreCopier.java index 822979c1..7678397a 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/copier/KeystoreCopier.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/copier/KeystoreCopier.java @@ -26,20 +26,23 @@ import org.onap.oom.truststoremerger.common.FileTools; import org.onap.oom.truststoremerger.configuration.model.AppConfiguration; import org.onap.oom.truststoremerger.copier.exception.KeystoreFileCopyException; import org.onap.oom.truststoremerger.copier.exception.KeystoreNotExistException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class KeystoreCopier { - final private FileTools fileTools; + private static final Logger LOGGER = LoggerFactory.getLogger(KeystoreCopier.class); + private final FileTools fileTools; public KeystoreCopier(FileTools fileTools) { this.fileTools = fileTools; } public void copyKeystores(AppConfiguration configuration) { + final List<String> sources = configuration.getSourceKeystorePaths(); + final List<String> destinations = configuration.getDestinationKeystorePaths(); + containsPaths(sources); try { - final List<String> sources = configuration.getSourceKeystorePaths(); - final List<String> destinations = configuration.getDestinationKeystorePaths(); - for (int i = 0; i < sources.size(); i++) { copy(sources.get(i), destinations.get(i)); } @@ -48,6 +51,12 @@ public class KeystoreCopier { } } + private void containsPaths(List<String> sources) { + if (sources.size() == 0) { + LOGGER.info("No Keystore files to copy"); + } + } + private void copy(String sourcePath, String destinationPath) throws IOException { final File source = new File(sourcePath); final File destination = new File(destinationPath); |