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