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