adc58e537cfcbbe29f1f284decc0c69681a4c42a
[aai/model-loader.git] / src / main / java / org / onap / aai / modelloader / config / ModelLoaderConfig.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21
22 package org.onap.aai.modelloader.config;
23
24 import java.io.File;
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;
34
35 /**
36  * Properties for the Model Loader
37  *
38  */
39 public class ModelLoaderConfig implements IConfiguration {
40
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.";
47
48     private static final String SUFFIX_KEYSTORE_FILE = "KEYSTORE_FILE";
49     private static final String SUFFIX_KEYSTORE_PASS = "KEYSTORE_PASSWORD";
50
51     private static final String SUFFIX_TRUSTSTORE_FILE = "TRUSTSTORE_FILE";
52     private static final String SUFFIX_TRUSTSTORE_PASS = "TRUSTSTORE_PASSWORD";
53
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";
79
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
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
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");
100
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;
107
108     public ModelLoaderConfig(Properties configProperties) {
109         this(configProperties, ModelLoaderConfig.configHome + FILESEP + "auth" + FILESEP);
110     }
111
112     /**
113      * Original constructor
114      *
115      * @param modelLoaderProperties
116      *            properties needed to be configured for the model loader
117      * @param certLocation
118      *            location of the certificate
119      */
120     public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
121         this.modelLoaderProperties = modelLoaderProperties;
122         this.certLocation = certLocation;
123
124         // Get list of artifact types
125         String types = get(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES);
126         if (types != null) {
127             artifactTypes.addAll(Arrays.asList(types.split(",")));
128         }
129
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(",")));
134         }
135     }
136
137     public static void setConfigHome(String configHome) {
138         ModelLoaderConfig.configHome = configHome;
139     }
140
141     public static Path propertiesFile() {
142         return Paths.get(configHome, "model-loader.properties");
143     }
144
145     @Override
146     public boolean activateServerTLSAuth() {
147         String value = get(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
148         return Boolean.parseBoolean(value);
149     }
150
151     @Override
152     public String getAsdcAddress() {
153         return get(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
154     }
155
156     @Override
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);
160         if (value == null) {
161           return true;
162         }
163         return Boolean.parseBoolean(value);
164     }
165
166     @Override
167     public String getConsumerGroup() {
168         return get(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
169     }
170
171     @Override
172     public String getConsumerID() {
173         return get(PROP_ML_DISTRIBUTION_CONSUMER_ID);
174     }
175
176     @Override
177     public String getEnvironmentName() {
178         return get(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
179     }
180
181     @Override
182     public String getKeyStorePassword() {
183         return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
184     }
185
186     @Override
187     public String getKeyStorePath() {
188         return certLocation + get(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
189     }
190
191     @Override
192     public String getPassword() {
193         return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_PASSWORD));
194     }
195
196     @Override
197     public int getPollingInterval() {
198         return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
199     }
200
201     @Override
202     public int getPollingTimeout() {
203         return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
204     }
205
206     @Override
207     public List<String> getRelevantArtifactTypes() {
208         return artifactTypes;
209     }
210
211     @Override
212     public String getUser() {
213         return get(PROP_ML_DISTRIBUTION_USER);
214     }
215
216     @Override
217     public boolean isFilterInEmptyResources() {
218         return false;
219     }
220
221     @Override
222     public Boolean isUseHttpsWithDmaap() {
223         String useHTTPS = get(PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP);
224         return useHTTPS != null && Boolean.valueOf(useHTTPS);
225     }
226
227     @Override
228     public List<String> getMsgBusAddress() {
229         return msgBusAddrs;
230     }
231
232     public String getAaiKeyStorePath() {
233         return certLocation + File.separator + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
234     }
235
236     public String getBabelKeyStorePath() {
237         String filename = get(PROP_BABEL_KEYSTORE_FILE);
238         if (filename == null) {
239             return null;
240         } else {
241             return certLocation + File.separator + filename;
242         }
243     }
244
245     public String getAaiKeyStorePassword() {
246         return getDeobfuscatedValue(get(PROP_AAI_KEYSTORE_PASSWORD));
247     }
248
249     public String getBabelKeyStorePassword() {
250         return getDeobfuscatedValue(get(PROP_BABEL_KEYSTORE_PASSWORD));
251     }
252
253     public String getBabelTrustStorePath() {
254         String filename = get(PROP_BABEL_TRUSTSTORE_FILE);
255         if (filename == null) {
256             return null;
257         } else {
258             return certLocation + File.separator + filename;
259         }
260     }
261
262     public String getBabelTrustStorePassword() {
263         return getDeobfuscatedValue(get(PROP_BABEL_TRUSTSTORE_PASSWORD));
264     }
265
266     public String getAaiBaseUrl() {
267         return get(PROP_AAI_BASE_URL);
268     }
269
270     public String getBabelBaseUrl() {
271         return get(PROP_BABEL_BASE_URL);
272     }
273
274     public String getBabelGenerateArtifactsUrl() {
275         return get(PROP_BABEL_GENERATE_RESOURCE_URL);
276     }
277
278     public String getAaiModelUrl(String version) {
279         setModelVersion(version);
280         return updatePropertyOXMVersion(PROP_AAI_MODEL_RESOURCE_URL, version);
281     }
282
283     public String getAaiNamedQueryUrl(String version) {
284         return updatePropertyOXMVersion(PROP_AAI_NAMED_QUERY_RESOURCE_URL, version);
285     }
286
287     public String getAaiVnfImageUrl() {
288         return updatePropertyOXMVersion(PROP_AAI_VNF_IMAGE_RESOURCE_URL, getModelVersion());
289     }
290
291     public String getAaiAuthenticationUser() {
292         return get(PROP_AAI_AUTHENTICATION_USER);
293     }
294
295     public String getModelVersion() {
296         return modelVersion;
297     }
298
299     public void setModelVersion(String modelVersion) {
300         this.modelVersion = modelVersion;
301     }
302
303     public boolean useGizmo() {
304         String useGizmo = get(PROP_AAI_USE_GIZMO);
305         return useGizmo != null && useGizmo.equalsIgnoreCase("true");
306     }
307
308     /**
309      * @return password for AAI authentication that has been reverse-engineered from its obfuscated form.
310      */
311     public String getAaiAuthenticationPassword() {
312         String password = getDeobfuscatedValue(get(PROP_AAI_AUTHENTICATION_PASSWORD));
313
314         if (password != null && password.isEmpty()) {
315             password = null;
316         }
317
318         return password;
319     }
320
321     /**
322      * @return a boolean value indicating whether the simulator is enabled.
323      */
324     public boolean getIngestSimulatorEnabled() {
325         String propValue = get(PROP_DEBUG_INGEST_SIMULATOR);
326         return propValue != null && "enabled".equalsIgnoreCase(propValue);
327     }
328
329     /**
330      * Read the value of the property and replace any wildcard OXM version "v*" with the supplied default OXM version
331      *
332      * @param propertyName
333      *            the name of the property storing the OXM version (possibly containing v*)
334      * @param version
335      *            the default OXM version
336      * @return the String value of the defined property (with any wildcard OXM version defaulted)
337      */
338     private String updatePropertyOXMVersion(String propertyName, String version) {
339         String value = get(propertyName);
340         if (version != null && value != null) {
341             value = value.replace("v*", version);
342         }
343         return value;
344     }
345
346     /**
347      * @return a boolean value indicating whether model loader is connected to ASDC.
348      */
349     public boolean getASDCConnectionDisabled() {
350         String propValue = get(PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED);
351         return propValue != null && "true".equalsIgnoreCase(propValue);
352     }
353
354     private String getDeobfuscatedValue(String property) {
355         if (property != null && property.startsWith("OBF:")) {
356             return Password.deobfuscate(property);
357         }
358         return property;
359     }
360
361     private String get(String key) {
362         String value = modelLoaderProperties.getProperty(key);
363
364         if (value != null && value.startsWith("ENV:")) {
365             value = System.getenv(StringUtils.removeStart(value, "ENV:"));
366         }
367         return value;
368     }
369 }