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