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