Return List<Artifact> in ArtifactDownloadManager
[aai/model-loader.git] / src / main / java / org / onap / aai / modelloader / config / ModelLoaderConfig.java
index c81f0dc..6723e75 100644 (file)
@@ -2,8 +2,8 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
+ * Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (c) 2017-2019 European Software Marketing Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.modelloader.config;
 
 import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.Properties;
+
+import org.apache.commons.lang3.StringUtils;
 import org.eclipse.jetty.util.security.Password;
 import org.onap.sdc.api.consumer.IConfiguration;
-
 /**
  * Properties for the Model Loader
  *
@@ -54,6 +58,7 @@ public class ModelLoaderConfig implements IConfiguration {
     protected static final String PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED =
             PREFIX_DISTRIBUTION_CLIENT + "ASDC_CONNECTION_DISABLE";
     protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_ADDRESS";
+    protected static final String PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_USE_HTTPS";
     protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_GROUP";
     protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_ID";
     protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME =
@@ -68,11 +73,13 @@ public class ModelLoaderConfig implements IConfiguration {
     protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT + "POLLING_TIMEOUT";
     protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
     protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT + "ARTIFACT_TYPES";
-    protected static final String PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES =
-            PREFIX_DISTRIBUTION_CLIENT + "MSG_BUS_ADDRESSES";
-    protected static final String PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP =
-            PREFIX_DISTRIBUTION_CLIENT + "USE_HTTPS_WITH_DMAAP";
-
+    protected static final String PROP_ML_DISTRIBUTION_HTTP_PROXY_HOST = PREFIX_DISTRIBUTION_CLIENT + "HTTP_PROXY_HOST";
+    protected static final String PROP_ML_DISTRIBUTION_HTTP_PROXY_PORT = PREFIX_DISTRIBUTION_CLIENT + "HTTP_PROXY_PORT";
+    protected static final String PROP_ML_DISTRIBUTION_HTTPS_PROXY_HOST = PREFIX_DISTRIBUTION_CLIENT + "HTTPS_PROXY_HOST";
+    protected static final String PROP_ML_DISTRIBUTION_HTTPS_PROXY_PORT = PREFIX_DISTRIBUTION_CLIENT + "HTTPS_PROXY_PORT";
+    protected static final String PROP_ML_DISTRIBUTION_SASL_JAAS_CONFIG = PREFIX_DISTRIBUTION_CLIENT + "SASL_JAAS_CONFIG";
+    protected static final String PROP_ML_DISTRIBUTION_SASL_MECHANISM = PREFIX_DISTRIBUTION_CLIENT + "SASL_MECHANISM";
+    protected static final String PROP_ML_DISTRIBUTION_SECURITY_PROTOCOL = PREFIX_DISTRIBUTION_CLIENT + "SECURITY_PROTOCOL";
     protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
     protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + SUFFIX_KEYSTORE_FILE;
     protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + SUFFIX_KEYSTORE_PASS;
@@ -82,23 +89,24 @@ public class ModelLoaderConfig implements IConfiguration {
     protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
     protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
     protected static final String PROP_AAI_USE_GIZMO = PREFIX_AAI + "USE_GIZMO";
-
+    protected static final String PROP_AAI_USE_HTTPS = PREFIX_AAI + "USE_HTTPS";
     protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL";
     protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE;
     protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS;
     protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE;
     protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS;
     protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL";
-
+    protected static final String PROP_BABEL_USE_HTTPS = PREFIX_BABEL + "USE_HTTPS";
     protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
     protected static final String FILESEP =
             (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
+    protected static final String PROP_AAI_CLIENT_CONNECT_TIMEOUT_MS = PREFIX_AAI + "RESTCLIENT_CONNECT_TIMEOUT";
+    protected static final String PROP_AAI_CLIENT_READ_TIMEOUT_MS = PREFIX_AAI + "RESTCLIENT_READ_TIMEOUT";
 
     private static String configHome;
     private Properties modelLoaderProperties = null;
     private String certLocation = ".";
-    private List<String> artifactTypes = null;
-    private List<String> msgBusAddrs = null;
+    private final List<String> artifactTypes = new ArrayList<>();
     private String modelVersion = null;
 
     public ModelLoaderConfig(Properties configProperties) {
@@ -109,30 +117,18 @@ public class ModelLoaderConfig implements IConfiguration {
      * Original constructor
      *
      * @param modelLoaderProperties
-     *        properties needed to be configured for the model loader
+     *            properties needed to be configured for the model loader
      * @param certLocation
-     *        location of the certificate
+     *            location of the certificate
      */
     public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
         this.modelLoaderProperties = modelLoaderProperties;
         this.certLocation = certLocation;
 
-        // Get list of artifacts
-        artifactTypes = new ArrayList<>();
-        if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES) != null) {
-            String[] artTypeList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES).split(",");
-            for (String artType : artTypeList) {
-                artifactTypes.add(artType);
-            }
-        }
-
-        // Get list of message bus addresses
-        msgBusAddrs = new ArrayList<>();
-        if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES) != null) {
-            String[] msgBusList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES).split(",");
-            for (String addr : msgBusList) {
-                msgBusAddrs.add(addr);
-            }
+        // Get list of artifact types
+        String types = get(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES);
+        if (types != null) {
+            artifactTypes.addAll(Arrays.asList(types.split(",")));
         }
     }
 
@@ -146,53 +142,63 @@ public class ModelLoaderConfig implements IConfiguration {
 
     @Override
     public boolean activateServerTLSAuth() {
-        String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
-        return value != null && Boolean.parseBoolean(value);
+        String value = get(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
+        return Boolean.parseBoolean(value);
+    }
+
+    @Override
+    public String getSdcAddress() {
+        return get(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
     }
 
     @Override
-    public String getAsdcAddress() {
-        return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
+    public Boolean isUseHttpsWithSDC() {
+        /* if PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS is null, https will be used, as before */
+        String value = get(PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS);
+        if (value == null) {
+          return true;
+        }
+        return Boolean.parseBoolean(value);
     }
 
     @Override
     public String getConsumerGroup() {
-        return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
+        return get(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
     }
 
     @Override
     public String getConsumerID() {
-        return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_ID);
+        return get(PROP_ML_DISTRIBUTION_CONSUMER_ID);
     }
 
     @Override
     public String getEnvironmentName() {
-        return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
+        return get(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
     }
 
     @Override
     public String getKeyStorePassword() {
-        return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
+        return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
     }
 
     @Override
     public String getKeyStorePath() {
-        return certLocation + modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
+        return certLocation + get(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
     }
 
     @Override
     public String getPassword() {
-        return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_PASSWORD));
+        return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_PASSWORD));
     }
 
     @Override
     public int getPollingInterval() {
-        return Integer.parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
+        return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
     }
 
     @Override
     public int getPollingTimeout() {
-        return Integer.parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
+        return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
     }
 
     @Override
@@ -202,7 +208,7 @@ public class ModelLoaderConfig implements IConfiguration {
 
     @Override
     public String getUser() {
-        return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_USER);
+        return get(PROP_ML_DISTRIBUTION_USER);
     }
 
     @Override
@@ -211,14 +217,23 @@ public class ModelLoaderConfig implements IConfiguration {
     }
 
     @Override
-    public Boolean isUseHttpsWithDmaap() {
-        String useHTTPS = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP);
-        return useHTTPS != null && Boolean.valueOf(useHTTPS);
+    public String getHttpProxyHost() {
+        return getPropertyOrNull(PROP_ML_DISTRIBUTION_HTTP_PROXY_HOST);
     }
 
     @Override
-    public List<String> getMsgBusAddress() {
-        return msgBusAddrs;
+    public int getHttpProxyPort() {
+        return getIntegerPropertyOrZero(PROP_ML_DISTRIBUTION_HTTP_PROXY_PORT);
+    }
+
+    @Override
+    public String getHttpsProxyHost() {
+        return getPropertyOrNull(PROP_ML_DISTRIBUTION_HTTPS_PROXY_HOST);
+    }
+
+    @Override
+    public int getHttpsProxyPort() {
+        return getIntegerPropertyOrZero(PROP_ML_DISTRIBUTION_HTTPS_PROXY_PORT);
     }
 
     public String getAaiKeyStorePath() {
@@ -226,7 +241,7 @@ public class ModelLoaderConfig implements IConfiguration {
     }
 
     public String getBabelKeyStorePath() {
-        String filename = modelLoaderProperties.getProperty(PROP_BABEL_KEYSTORE_FILE);
+        String filename = get(PROP_BABEL_KEYSTORE_FILE);
         if (filename == null) {
             return null;
         } else {
@@ -235,15 +250,15 @@ public class ModelLoaderConfig implements IConfiguration {
     }
 
     public String getAaiKeyStorePassword() {
-        return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_PASSWORD));
+        return getDeobfuscatedValue(get(PROP_AAI_KEYSTORE_PASSWORD));
     }
 
     public String getBabelKeyStorePassword() {
-        return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_BABEL_KEYSTORE_PASSWORD));
+        return getDeobfuscatedValue(get(PROP_BABEL_KEYSTORE_PASSWORD));
     }
 
     public String getBabelTrustStorePath() {
-        String filename = modelLoaderProperties.getProperty(PROP_BABEL_TRUSTSTORE_FILE);
+        String filename = get(PROP_BABEL_TRUSTSTORE_FILE);
         if (filename == null) {
             return null;
         } else {
@@ -252,36 +267,36 @@ public class ModelLoaderConfig implements IConfiguration {
     }
 
     public String getBabelTrustStorePassword() {
-        return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_BABEL_TRUSTSTORE_PASSWORD));
+        return getDeobfuscatedValue(get(PROP_BABEL_TRUSTSTORE_PASSWORD));
     }
 
     public String getAaiBaseUrl() {
-        return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);
+        return get(PROP_AAI_BASE_URL);
     }
 
     public String getBabelBaseUrl() {
-        return modelLoaderProperties.getProperty(PROP_BABEL_BASE_URL);
+        return get(PROP_BABEL_BASE_URL);
     }
 
     public String getBabelGenerateArtifactsUrl() {
-        return modelLoaderProperties.getProperty(PROP_BABEL_GENERATE_RESOURCE_URL);
+        return get(PROP_BABEL_GENERATE_RESOURCE_URL);
     }
 
     public String getAaiModelUrl(String version) {
         setModelVersion(version);
-        return updatePropertyOXMVersion(modelLoaderProperties, PROP_AAI_MODEL_RESOURCE_URL, version);
+        return updatePropertyOXMVersion(PROP_AAI_MODEL_RESOURCE_URL, version);
     }
 
     public String getAaiNamedQueryUrl(String version) {
-        return updatePropertyOXMVersion(modelLoaderProperties, PROP_AAI_NAMED_QUERY_RESOURCE_URL, version);
+        return updatePropertyOXMVersion(PROP_AAI_NAMED_QUERY_RESOURCE_URL, version);
     }
 
     public String getAaiVnfImageUrl() {
-        return updatePropertyOXMVersion(modelLoaderProperties, PROP_AAI_VNF_IMAGE_RESOURCE_URL, getModelVersion());
+        return updatePropertyOXMVersion(PROP_AAI_VNF_IMAGE_RESOURCE_URL, getModelVersion());
     }
 
     public String getAaiAuthenticationUser() {
-        return modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_USER);
+        return get(PROP_AAI_AUTHENTICATION_USER);
     }
 
     public String getModelVersion() {
@@ -293,15 +308,25 @@ public class ModelLoaderConfig implements IConfiguration {
     }
 
     public boolean useGizmo() {
-        String useGizmo = modelLoaderProperties.getProperty(PROP_AAI_USE_GIZMO);
+        String useGizmo = get(PROP_AAI_USE_GIZMO);
         return useGizmo != null && useGizmo.equalsIgnoreCase("true");
     }
 
+    public boolean useHttpsWithAAI() {
+        String useHttps = get(PROP_AAI_USE_HTTPS);
+        return useHttps != null && useHttps.equalsIgnoreCase("true");
+    }
+
+    public boolean useHttpsWithBabel() {
+        String useHttps = get(PROP_BABEL_USE_HTTPS);
+        return useHttps != null && useHttps.equalsIgnoreCase("true");
+    }
+
     /**
      * @return password for AAI authentication that has been reverse-engineered from its obfuscated form.
      */
     public String getAaiAuthenticationPassword() {
-        String password = Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_PASSWORD));
+        String password = getDeobfuscatedValue(get(PROP_AAI_AUTHENTICATION_PASSWORD));
 
         if (password != null && password.isEmpty()) {
             password = null;
@@ -314,27 +339,112 @@ public class ModelLoaderConfig implements IConfiguration {
      * @return a boolean value indicating whether the simulator is enabled.
      */
     public boolean getIngestSimulatorEnabled() {
-        String propValue = modelLoaderProperties.getProperty(PROP_DEBUG_INGEST_SIMULATOR);
+        String propValue = get(PROP_DEBUG_INGEST_SIMULATOR);
         return propValue != null && "enabled".equalsIgnoreCase(propValue);
     }
 
     /**
-     * @return a String value of the defined property with the oxm version
+     * Read the value of the property and replace any wildcard OXM version "v*" with the supplied default OXM version
+     *
+     * @param propertyName
+     *            the name of the property storing the OXM version (possibly containing v*)
+     * @param version
+     *            the default OXM version
+     * @return the String value of the defined property (with any wildcard OXM version defaulted)
      */
-    private String updatePropertyOXMVersion(Properties modelLoaderProperties, String propertyName, String version) {
-        if (version != null)
-            return modelLoaderProperties.getProperty(propertyName).replace("v*", version);
-        else
-            return modelLoaderProperties.getProperty(propertyName);
+    private String updatePropertyOXMVersion(String propertyName, String version) {
+        String value = get(propertyName);
+        if (version != null && value != null) {
+            value = value.replace("v*", version);
+        }
+        return value;
     }
 
     /**
      * @return a boolean value indicating whether model loader is connected to ASDC.
      */
     public boolean getASDCConnectionDisabled() {
-        String propValue = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED);
+        String propValue = get(PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED);
         return propValue != null && "true".equalsIgnoreCase(propValue);
+    }
+
+    private String getDeobfuscatedValue(String property) {
+        if (property != null && property.startsWith("OBF:")) {
+            return Password.deobfuscate(property);
+        }
+        return property;
+    }
+
+    private String get(String key) {
+        String value = modelLoaderProperties.getProperty(key);
 
+        if (value != null && value.startsWith("ENV:")) {
+            value = System.getenv(StringUtils.removeStart(value, "ENV:"));
+        }
+        return value;
+    }
+
+    public String getPropertyOrNull(String propertyName) {
+        String value = modelLoaderProperties.getProperty(propertyName);
+        if (value == null || "NULL".equals(value) || value.isEmpty()) {
+            return null;
+        } else {
+            return value;
+        }
+    }
+
+    public int getIntegerPropertyOrZero(String propertyName) {
+        String property = modelLoaderProperties.getProperty(propertyName);
+        if (property == null || "NULL".equals(property) || property.isEmpty()) {
+            return 0;
+        } else {
+            try {
+                return Integer.parseInt(property);
+            } catch (NumberFormatException e) {
+                return 0;
+            }
+        }
+    }
+
+    public int getClientConnectTimeoutMs() {
+        String connectTimeout = Optional.ofNullable(get(PROP_AAI_CLIENT_CONNECT_TIMEOUT_MS)).orElse("120000");
+        return Integer.parseInt(connectTimeout);
+    }
+
+    public int getClientReadTimeoutMs() {
+        String connectTimeout = Optional.ofNullable(get(PROP_AAI_CLIENT_READ_TIMEOUT_MS)).orElse("120000");
+        return Integer.parseInt(connectTimeout);
+    }
+
+    @Override
+    public String getKafkaSaslJaasConfig() {
+        String saslJaasConfFromEnv = System.getenv("SASL_JAAS_CONFIG");
+        if(saslJaasConfFromEnv != null) {
+            return saslJaasConfFromEnv;
+        }
+        if(get(PROP_ML_DISTRIBUTION_SASL_JAAS_CONFIG) != null) {
+            return get(PROP_ML_DISTRIBUTION_SASL_JAAS_CONFIG);
+        }
+        return null;
+    }
+
+    @Override
+    public String getKafkaSaslMechanism() {
+        if(get(PROP_ML_DISTRIBUTION_SASL_MECHANISM) != null) {
+            return get(PROP_ML_DISTRIBUTION_SASL_MECHANISM);
+        }
+        return System.getenv().getOrDefault("SASL_MECHANISM", "SCRAM-SHA-512");
+    }
+
+    /**
+     * One of PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL
+     */
+    @Override
+    public String getKafkaSecurityProtocolConfig() {
+        if(get(PROP_ML_DISTRIBUTION_SECURITY_PROTOCOL) != null) {
+            return get(PROP_ML_DISTRIBUTION_SECURITY_PROTOCOL);
+        }
+        return System.getenv().getOrDefault("SECURITY_PROTOCOL", "SASL_PLAINTEXT");
     }
 
 }