7523fce765be5807235193e0e7cb27b37b2848f0
[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.List;
29 import java.util.Properties;
30 import org.apache.commons.lang3.StringUtils;
31 import org.eclipse.jetty.util.security.Password;
32 import org.onap.sdc.api.consumer.IConfiguration;
33
34 /**
35  * Properties for the Model Loader
36  *
37  */
38 public class ModelLoaderConfig implements IConfiguration {
39
40     // Configuration file structure
41     public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";
42     public static final String PREFIX_DISTRIBUTION_CLIENT = PREFIX_MODEL_LOADER_CONFIG + ".distribution.";
43     public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";
44     public static final String PREFIX_BABEL = PREFIX_MODEL_LOADER_CONFIG + ".babel.";
45     public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";
46
47     private static final String SUFFIX_KEYSTORE_FILE = "KEYSTORE_FILE";
48     private static final String SUFFIX_KEYSTORE_PASS = "KEYSTORE_PASSWORD";
49
50     private static final String SUFFIX_TRUSTSTORE_FILE = "TRUSTSTORE_FILE";
51     private static final String SUFFIX_TRUSTSTORE_PASS = "TRUSTSTORE_PASSWORD";
52
53     // Configuration file properties
54     protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH =
55             PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
56     protected static final String PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED =
57             PREFIX_DISTRIBUTION_CLIENT + "ASDC_CONNECTION_DISABLE";
58     protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_ADDRESS";
59     protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_GROUP";
60     protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_ID";
61     protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME =
62             PREFIX_DISTRIBUTION_CLIENT + "ENVIRONMENT_NAME";
63     protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD =
64             PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_PASS;
65     protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE =
66             PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_FILE;
67     protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT + "PASSWORD";
68     protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL =
69             PREFIX_DISTRIBUTION_CLIENT + "POLLING_INTERVAL";
70     protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT + "POLLING_TIMEOUT";
71     protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
72     protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT + "ARTIFACT_TYPES";
73     protected static final String PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES =
74             PREFIX_DISTRIBUTION_CLIENT + "MSG_BUS_ADDRESSES";
75     protected static final String PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP =
76             PREFIX_DISTRIBUTION_CLIENT + "USE_HTTPS_WITH_DMAAP";
77
78     protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
79     protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + SUFFIX_KEYSTORE_FILE;
80     protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + SUFFIX_KEYSTORE_PASS;
81     protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";
82     protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";
83     protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";
84     protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
85     protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
86     protected static final String PROP_AAI_USE_GIZMO = PREFIX_AAI + "USE_GIZMO";
87
88     protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL";
89     protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE;
90     protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS;
91     protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE;
92     protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS;
93     protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL";
94
95     protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
96     protected static final String FILESEP =
97             (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
98
99     private static String configHome;
100     private Properties modelLoaderProperties = null;
101     private String certLocation = ".";
102     private List<String> artifactTypes = new ArrayList<>();
103     private List<String> msgBusAddrs = new ArrayList<>();
104     private String modelVersion = null;
105
106     public ModelLoaderConfig(Properties configProperties) {
107         this(configProperties, ModelLoaderConfig.configHome + FILESEP + "auth" + FILESEP);
108     }
109
110     /**
111      * Original constructor
112      *
113      * @param modelLoaderProperties
114      *            properties needed to be configured for the model loader
115      * @param certLocation
116      *            location of the certificate
117      */
118     public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
119         this.modelLoaderProperties = modelLoaderProperties;
120         this.certLocation = certLocation;
121
122         // Get list of artifact types
123         String types = get(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES);
124         if (types != null) {
125             for (String artType : types.split(",")) {
126                 artifactTypes.add(artType);
127             }
128         }
129
130         // Get list of message bus addresses
131         String addresses = get(PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES);
132         if (addresses != null) {
133             for (String addr : addresses.split(",")) {
134                 msgBusAddrs.add(addr);
135             }
136         }
137     }
138
139     public static void setConfigHome(String configHome) {
140         ModelLoaderConfig.configHome = configHome;
141     }
142
143     public static Path propertiesFile() {
144         return Paths.get(configHome, "model-loader.properties");
145     }
146
147     @Override
148     public boolean activateServerTLSAuth() {
149         String value = get(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
150         return value != null && Boolean.parseBoolean(value);
151     }
152
153     @Override
154     public String getAsdcAddress() {
155         return get(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
156     }
157
158     @Override
159     public String getConsumerGroup() {
160         return get(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
161     }
162
163     @Override
164     public String getConsumerID() {
165         return get(PROP_ML_DISTRIBUTION_CONSUMER_ID);
166     }
167
168     @Override
169     public String getEnvironmentName() {
170         return get(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
171     }
172
173     @Override
174     public String getKeyStorePassword() {
175         return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
176     }
177
178     @Override
179     public String getKeyStorePath() {
180         return certLocation + get(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
181     }
182
183     @Override
184     public String getPassword() {
185         return getDeobfuscatedValue(get(PROP_ML_DISTRIBUTION_PASSWORD));
186     }
187
188     @Override
189     public int getPollingInterval() {
190         return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
191     }
192
193     @Override
194     public int getPollingTimeout() {
195         return Integer.parseInt(get(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
196     }
197
198     @Override
199     public List<String> getRelevantArtifactTypes() {
200         return artifactTypes;
201     }
202
203     @Override
204     public String getUser() {
205         return get(PROP_ML_DISTRIBUTION_USER);
206     }
207
208     @Override
209     public boolean isFilterInEmptyResources() {
210         return false;
211     }
212
213     @Override
214     public Boolean isUseHttpsWithDmaap() {
215         String useHTTPS = get(PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP);
216         return useHTTPS != null && Boolean.valueOf(useHTTPS);
217     }
218
219     @Override
220     public List<String> getMsgBusAddress() {
221         return msgBusAddrs;
222     }
223
224     public String getAaiKeyStorePath() {
225         return certLocation + File.separator + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
226     }
227
228     public String getBabelKeyStorePath() {
229         String filename = get(PROP_BABEL_KEYSTORE_FILE);
230         if (filename == null) {
231             return null;
232         } else {
233             return certLocation + File.separator + filename;
234         }
235     }
236
237     public String getAaiKeyStorePassword() {
238         return getDeobfuscatedValue(get(PROP_AAI_KEYSTORE_PASSWORD));
239     }
240
241     public String getBabelKeyStorePassword() {
242         return getDeobfuscatedValue(get(PROP_BABEL_KEYSTORE_PASSWORD));
243     }
244
245     public String getBabelTrustStorePath() {
246         String filename = get(PROP_BABEL_TRUSTSTORE_FILE);
247         if (filename == null) {
248             return null;
249         } else {
250             return certLocation + File.separator + filename;
251         }
252     }
253
254     public String getBabelTrustStorePassword() {
255         return getDeobfuscatedValue(get(PROP_BABEL_TRUSTSTORE_PASSWORD));
256     }
257
258     public String getAaiBaseUrl() {
259         return get(PROP_AAI_BASE_URL);
260     }
261
262     public String getBabelBaseUrl() {
263         return get(PROP_BABEL_BASE_URL);
264     }
265
266     public String getBabelGenerateArtifactsUrl() {
267         return get(PROP_BABEL_GENERATE_RESOURCE_URL);
268     }
269
270     public String getAaiModelUrl(String version) {
271         setModelVersion(version);
272         return updatePropertyOXMVersion(PROP_AAI_MODEL_RESOURCE_URL, version);
273     }
274
275     public String getAaiNamedQueryUrl(String version) {
276         return updatePropertyOXMVersion(PROP_AAI_NAMED_QUERY_RESOURCE_URL, version);
277     }
278
279     public String getAaiVnfImageUrl() {
280         return updatePropertyOXMVersion(PROP_AAI_VNF_IMAGE_RESOURCE_URL, getModelVersion());
281     }
282
283     public String getAaiAuthenticationUser() {
284         return get(PROP_AAI_AUTHENTICATION_USER);
285     }
286
287     public String getModelVersion() {
288         return modelVersion;
289     }
290
291     public void setModelVersion(String modelVersion) {
292         this.modelVersion = modelVersion;
293     }
294
295     public boolean useGizmo() {
296         String useGizmo = get(PROP_AAI_USE_GIZMO);
297         return useGizmo != null && useGizmo.equalsIgnoreCase("true");
298     }
299
300     /**
301      * @return password for AAI authentication that has been reverse-engineered from its obfuscated form.
302      */
303     public String getAaiAuthenticationPassword() {
304         String password = getDeobfuscatedValue(get(PROP_AAI_AUTHENTICATION_PASSWORD));
305
306         if (password != null && password.isEmpty()) {
307             password = null;
308         }
309
310         return password;
311     }
312
313     /**
314      * @return a boolean value indicating whether the simulator is enabled.
315      */
316     public boolean getIngestSimulatorEnabled() {
317         String propValue = get(PROP_DEBUG_INGEST_SIMULATOR);
318         return propValue != null && "enabled".equalsIgnoreCase(propValue);
319     }
320
321     /**
322      * Read the value of the property and replace any wildcard OXM version "v*" with the supplied default OXM version
323      * 
324      * @param propertyName
325      *            the name of the property storing the OXM version (possibly containing v*)
326      * @param version
327      *            the default OXM version
328      * @return the String value of the defined property (with any wildcard OXM version defaulted)
329      */
330     private String updatePropertyOXMVersion(String propertyName, String version) {
331         String value = get(propertyName);
332         if (version != null && value != null) {
333             value = value.replace("v*", version);
334         }
335         return value;
336     }
337
338     /**
339      * @return a boolean value indicating whether model loader is connected to ASDC.
340      */
341     public boolean getASDCConnectionDisabled() {
342         String propValue = get(PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED);
343         return propValue != null && "true".equalsIgnoreCase(propValue);
344     }
345
346     private String getDeobfuscatedValue(String property) {
347         if (property != null && property.startsWith("OBF:")) {
348             return Password.deobfuscate(property);
349         }
350         return property;
351     }
352
353     private String get(String key) {
354         String value = modelLoaderProperties.getProperty(key);
355
356         if (value != null && value.startsWith("ENV:")) {
357             value = System.getenv(StringUtils.removeStart(value, "ENV:"));
358         }
359         return value;
360     }
361 }