1 /*============LICENSE_START=======================================================
 
   2  * oom-truststore-merger
 
   3  * ================================================================================
 
   4  * Copyright (C) 2020 Nokia. All rights reserved.
 
   5  * ================================================================================
 
   6  * Licensed under the Apache License, Version 2.0 (the "License");
 
   7  * you may not use this file except in compliance with the License.
 
   8  * You may obtain a copy of the License at
 
  10  *      http://www.apache.org/licenses/LICENSE-2.0
 
  12  * Unless required by applicable law or agreed to in writing, software
 
  13  * distributed under the License is distributed on an "AS IS" BASIS,
 
  14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  15  * See the License for the specific language governing permissions and
 
  16  * limitations under the License.
 
  17  * ============LICENSE_END=========================================================
 
  20 package org.onap.oom.truststoremerger.certification.path;
 
  22 import static org.onap.oom.truststoremerger.api.ConfigurationEnvs.TRUSTSTORES_ENV;
 
  23 import static org.onap.oom.truststoremerger.api.ConfigurationEnvs.TRUSTSTORES_PASSWORDS_ENV;
 
  25 import java.util.Arrays;
 
  26 import java.util.List;
 
  27 import java.util.function.Predicate;
 
  29 public class TruststoresPathsProvider {
 
  31     private static final String DELIMITER = ":";
 
  32     private static final int NEGATIVE_SPLIT_LIMIT = -1;
 
  34     private EnvProvider envProvider;
 
  35     private PathValidator pathValidator;
 
  37     public TruststoresPathsProvider(EnvProvider envProvider, PathValidator pathValidator) {
 
  38         this.envProvider = envProvider;
 
  39         this.pathValidator = pathValidator;
 
  42     public List<String> getTruststores() throws TruststoresPathsProviderException {
 
  43         return envProvider.getEnv(TRUSTSTORES_ENV)
 
  44             .filter(Predicate.not(String::isEmpty))
 
  45             .map(this::splitToList)
 
  46             .filter(this::validateTruststores)
 
  47             .orElseThrow(() -> new TruststoresPathsProviderException(
 
  48                 TRUSTSTORES_ENV + " environment variable does not contain valid truststores paths"));
 
  51     public List<String> getTruststoresPasswords() throws TruststoresPathsProviderException {
 
  52         return envProvider.getEnv(TRUSTSTORES_PASSWORDS_ENV)
 
  53             .map(this::splitToList)
 
  54             .filter(this::validateTruststoresPasswords)
 
  55             .orElseThrow(() -> new TruststoresPathsProviderException(
 
  56                 TRUSTSTORES_PASSWORDS_ENV + " environment variable does not contain valid passwords paths"));
 
  59     private boolean validateTruststores(List<String> truststores) {
 
  60         return truststores.stream()
 
  61             .allMatch(pathValidator::isTruststorePathValid);
 
  64     private boolean validateTruststoresPasswords(List<String> truststoresPasswords) {
 
  65         return truststoresPasswords.stream()
 
  66             .allMatch(pathValidator::isTruststorePasswordPathValid);
 
  69     private List<String> splitToList(String stringToSplit) {
 
  70         return Arrays.asList(stringToSplit.split(DELIMITER, NEGATIVE_SPLIT_LIMIT));