2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright (c) 2017-2019 European Software Marketing Ltd.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.aai.modelloader.config;
25 import java.nio.file.Path;
26 import java.nio.file.Paths;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Properties;
31 import org.apache.commons.lang3.StringUtils;
32 import org.eclipse.jetty.util.security.Password;
33 import org.onap.sdc.api.consumer.IConfiguration;
36 * Properties for the Model Loader
39 public class ModelLoaderConfig implements IConfiguration {
41 // Configuration file structure
42 public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";
43 public static final String PREFIX_DISTRIBUTION_CLIENT = PREFIX_MODEL_LOADER_CONFIG + ".distribution.";
44 public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";
45 public static final String PREFIX_BABEL = PREFIX_MODEL_LOADER_CONFIG + ".babel.";
46 public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";
48 private static final String SUFFIX_KEYSTORE_FILE = "KEYSTORE_FILE";
49 private static final String SUFFIX_KEYSTORE_PASS = "KEYSTORE_PASSWORD";
51 private static final String SUFFIX_TRUSTSTORE_FILE = "TRUSTSTORE_FILE";
52 private static final String SUFFIX_TRUSTSTORE_PASS = "TRUSTSTORE_PASSWORD";
54 // Configuration file properties
55 protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH =
56 PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
57 protected static final String PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED =
58 PREFIX_DISTRIBUTION_CLIENT + "ASDC_CONNECTION_DISABLE";
59 protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_ADDRESS";
60 protected static final String PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_USE_HTTPS";
61 protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_GROUP";
62 protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_ID";
63 protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME =
64 PREFIX_DISTRIBUTION_CLIENT + "ENVIRONMENT_NAME";
65 protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD =
66 PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_PASS;
67 protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE =
68 PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_FILE;
69 protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT + "PASSWORD";
70 protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL =
71 PREFIX_DISTRIBUTION_CLIENT + "POLLING_INTERVAL";
72 protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT + "POLLING_TIMEOUT";
73 protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
74 protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT + "ARTIFACT_TYPES";
75 protected static final String PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES =
76 PREFIX_DISTRIBUTION_CLIENT + "MSG_BUS_ADDRESSES";
77 protected static final String PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP =
78 PREFIX_DISTRIBUTION_CLIENT + "USE_HTTPS_WITH_DMAAP";
80 protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
81 protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + SUFFIX_KEYSTORE_FILE;
82 protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + SUFFIX_KEYSTORE_PASS;
83 protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";
84 protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";
85 protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";
86 protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
87 protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
88 protected static final String PROP_AAI_USE_GIZMO = PREFIX_AAI + "USE_GIZMO";
89 protected static final String PROP_AAI_USE_HTTPS = PREFIX_AAI + "USE_HTTPS";
90 protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL";
91 protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE;
92 protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS;
93 protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE;
94 protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS;
95 protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL";
96 protected static final String PROP_BABEL_USE_HTTPS = PREFIX_BABEL + "USE_HTTPS";
97 protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
98 protected static final String FILESEP =
99 (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
101 private static String configHome;
102 private Properties modelLoaderProperties = null;
103 private String certLocation = ".";
104 private List<String> artifactTypes = new ArrayList<>();
105 private List<String> msgBusAddrs = new ArrayList<>();
106 private String modelVersion = null;
108 public ModelLoaderConfig(Properties configProperties) {
109 this(configProperties, ModelLoaderConfig.configHome + FILESEP + "auth" + FILESEP);
113 * Original constructor
115 * @param modelLoaderProperties
116 * properties needed to be configured for the model loader
117 * @param certLocation
118 * location of the certificate
120 public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
121 this.modelLoaderProperties = modelLoaderProperties;
122 this.certLocation = certLocation;
124 // Get list of artifact types
125 String types = get(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES);
127 artifactTypes.addAll(Arrays.asList(types.split(",")));
130 // Get list of message bus addresses
131 String addresses = get(PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES);
132 if (addresses != null) {
133 msgBusAddrs.addAll(Arrays.asList(addresses.split(",")));
137 public static void setConfigHome(String configHome) {
138 ModelLoaderConfig.configHome = configHome;
141 public static Path propertiesFile() {
142 return Paths.get(configHome, "model-loader.properties");
146 public boolean activateServerTLSAuth() {
147 String value = get(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
148 return Boolean.parseBoolean(value);
152 public String getAsdcAddress() {
153 return get(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
157 public Boolean isUseHttpsWithSDC() {
158 /* if PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS is null, https will be used, as before */
159 String value = get(PROP_ML_DISTRIBUTION_ASDC_USE_HTTPS);
163 return Boolean.parseBoolean(value);
167 public String getConsumerGroup() {
168 return get(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
172 public String getConsumerID() {
173 return get(PROP_ML_DISTRIBUTION_CONSUMER_ID);
177 public String getEnvironmentName() {
178 return get(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
182 public String getKeyStorePassword() {
183 return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
187 public String getKeyStorePath() {
188 return certLocation + get(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
192 public String getPassword() {
193 return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_PASSWORD));
197 public int getPollingInterval() {
198 return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
202 public int getPollingTimeout() {
203 return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
207 public List<String> getRelevantArtifactTypes() {
208 return artifactTypes;
212 public String getUser() {
213 return get(PROP_ML_DISTRIBUTION_USER);
217 public boolean isFilterInEmptyResources() {
222 public Boolean isUseHttpsWithDmaap() {
223 String useHTTPS = get(PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP);
224 return useHTTPS != null && Boolean.valueOf(useHTTPS);
228 public List<String> getMsgBusAddress() {
232 public String getAaiKeyStorePath() {
233 return certLocation + File.separator + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
236 public String getBabelKeyStorePath() {
237 String filename = get(PROP_BABEL_KEYSTORE_FILE);
238 if (filename == null) {
241 return certLocation + File.separator + filename;
245 public String getAaiKeyStorePassword() {
246 return getDeobfuscatedValue(get(PROP_AAI_KEYSTORE_PASSWORD));
249 public String getBabelKeyStorePassword() {
250 return getDeobfuscatedValue(get(PROP_BABEL_KEYSTORE_PASSWORD));
253 public String getBabelTrustStorePath() {
254 String filename = get(PROP_BABEL_TRUSTSTORE_FILE);
255 if (filename == null) {
258 return certLocation + File.separator + filename;
262 public String getBabelTrustStorePassword() {
263 return getDeobfuscatedValue(get(PROP_BABEL_TRUSTSTORE_PASSWORD));
266 public String getAaiBaseUrl() {
267 return get(PROP_AAI_BASE_URL);
270 public String getBabelBaseUrl() {
271 return get(PROP_BABEL_BASE_URL);
274 public String getBabelGenerateArtifactsUrl() {
275 return get(PROP_BABEL_GENERATE_RESOURCE_URL);
278 public String getAaiModelUrl(String version) {
279 setModelVersion(version);
280 return updatePropertyOXMVersion(PROP_AAI_MODEL_RESOURCE_URL, version);
283 public String getAaiNamedQueryUrl(String version) {
284 return updatePropertyOXMVersion(PROP_AAI_NAMED_QUERY_RESOURCE_URL, version);
287 public String getAaiVnfImageUrl() {
288 return updatePropertyOXMVersion(PROP_AAI_VNF_IMAGE_RESOURCE_URL, getModelVersion());
291 public String getAaiAuthenticationUser() {
292 return get(PROP_AAI_AUTHENTICATION_USER);
295 public String getModelVersion() {
299 public void setModelVersion(String modelVersion) {
300 this.modelVersion = modelVersion;
303 public boolean useGizmo() {
304 String useGizmo = get(PROP_AAI_USE_GIZMO);
305 return useGizmo != null && useGizmo.equalsIgnoreCase("true");
308 public boolean useHttpsWithAAI() {
309 String useHttps = get(PROP_AAI_USE_HTTPS);
310 return useHttps != null && useHttps.equalsIgnoreCase("true");
313 public boolean useHttpsWithBabel() {
314 String useHttps = get(PROP_BABEL_USE_HTTPS);
315 return useHttps != null && useHttps.equalsIgnoreCase("true");
319 * @return password for AAI authentication that has been reverse-engineered from its obfuscated form.
321 public String getAaiAuthenticationPassword() {
322 String password = getDeobfuscatedValue(get(PROP_AAI_AUTHENTICATION_PASSWORD));
324 if (password != null && password.isEmpty()) {
332 * @return a boolean value indicating whether the simulator is enabled.
334 public boolean getIngestSimulatorEnabled() {
335 String propValue = get(PROP_DEBUG_INGEST_SIMULATOR);
336 return propValue != null && "enabled".equalsIgnoreCase(propValue);
340 * Read the value of the property and replace any wildcard OXM version "v*" with the supplied default OXM version
342 * @param propertyName
343 * the name of the property storing the OXM version (possibly containing v*)
345 * the default OXM version
346 * @return the String value of the defined property (with any wildcard OXM version defaulted)
348 private String updatePropertyOXMVersion(String propertyName, String version) {
349 String value = get(propertyName);
350 if (version != null && value != null) {
351 value = value.replace("v*", version);
357 * @return a boolean value indicating whether model loader is connected to ASDC.
359 public boolean getASDCConnectionDisabled() {
360 String propValue = get(PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED);
361 return propValue != null && "true".equalsIgnoreCase(propValue);
364 private String getDeobfuscatedValue(String property) {
365 if (property != null && property.startsWith("OBF:")) {
366 return Password.deobfuscate(property);
371 private String get(String key) {
372 String value = modelLoaderProperties.getProperty(key);
374 if (value != null && value.startsWith("ENV:")) {
375 value = System.getenv(StringUtils.removeStart(value, "ENV:"));