Add WORKFLOW artifactType to SDC Config
[so.git] / asdc-controller / src / main / java / org / onap / so / asdc / client / ASDCConfiguration.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.asdc.client;
24
25
26 import java.security.GeneralSecurityException;
27 import java.util.Arrays;
28 import java.util.Collections;
29 import java.util.List;
30 import org.onap.sdc.api.consumer.IConfiguration;
31 import org.onap.so.utils.CryptoUtils;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.beans.factory.annotation.Value;
36 import org.springframework.core.env.Environment;
37 import org.springframework.stereotype.Component;
38
39 @Component
40 public class ASDCConfiguration implements IConfiguration {
41
42     // SHell command to obtain the same encryption, 128 bits key, key must be HEX
43     // echo -n "This is a test string" | openssl aes-128-ecb -e -K 546573746F736973546573746F736973 -nosalt | xxd
44
45     private static Logger logger = LoggerFactory.getLogger(ASDCConfiguration.class);
46
47
48     private String asdcControllerName;
49
50     public static final String HEAT = "HEAT";
51     public static final String HEAT_ARTIFACT = "HEAT_ARTIFACT";
52     public static final String HEAT_ENV = "HEAT_ENV";
53     public static final String HEAT_NESTED = "HEAT_NESTED";
54     public static final String HEAT_NET = "HEAT_NET";
55     public static final String HEAT_VOL = "HEAT_VOL";
56     public static final String OTHER = "OTHER";
57     public static final String TOSCA_CSAR = "TOSCA_CSAR";
58     public static final String WORKFLOW = "WORKFLOW";
59     public static final String VF_MODULES_METADATA = "VF_MODULES_METADATA";
60     public static final String CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT = "CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT";
61
62     private static final String[] SUPPORTED_ARTIFACT_TYPES = {HEAT, HEAT_ARTIFACT, HEAT_ENV, HEAT_NESTED, HEAT_NET,
63             HEAT_VOL, OTHER, TOSCA_CSAR, VF_MODULES_METADATA, CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT, WORKFLOW};
64
65     public static final List<String> SUPPORTED_ARTIFACT_TYPES_LIST =
66             Collections.unmodifiableList(Arrays.asList(SUPPORTED_ARTIFACT_TYPES));
67
68     @Autowired
69     private Environment env;
70
71     @Value("${mso.asdc.config.key}")
72     private String configKey;
73
74     @Value("${mso.asdc-connections.asdc-controller1.messageBusAddress}")
75     private String[] messageBusAddress;
76
77
78     public void setAsdcControllerName(String asdcControllerName) {
79         this.asdcControllerName = asdcControllerName;
80     }
81
82     @Override
83     public java.lang.Boolean isUseHttpsWithDmaap() {
84         return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.useHttpsWithDmaap", true);
85     }
86
87     @Override
88     public boolean isConsumeProduceStatusTopic() {
89         return true;
90     }
91
92     @Override
93     public List<String> getMsgBusAddress() {
94         if (messageBusAddress.length > 0) {
95             return Arrays.asList(messageBusAddress);
96         } else {
97             return Collections.emptyList();
98         }
99
100
101     }
102
103     public String getAsdcControllerName() {
104         return asdcControllerName;
105     }
106
107
108     @Override
109     public String getConsumerGroup() {
110         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.consumerGroup");
111     }
112
113     public int getWatchDogTimeout() {
114         return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.watchDogTimeout");
115
116     }
117
118     @Override
119     public String getConsumerID() {
120         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.consumerId");
121     }
122
123     public int getIntegerPropertyOrZero(String propertyName) {
124         String property = env.getProperty(propertyName);
125         if (property == null || "NULL".equals(property) || property.isEmpty()) {
126             return 0;
127         } else {
128             try {
129                 return Integer.parseInt(property);
130             } catch (NumberFormatException e) {
131                 return 0;
132             }
133         }
134     }
135
136     public String getPropertyOrNull(String propertyName) {
137         String config = env.getProperty(propertyName);
138         if (config == null || "NULL".equals(config) || config.isEmpty()) {
139             return null;
140         } else {
141             return config;
142         }
143     }
144
145     public String getEncryptedPropertyOrNull(String propertyName) {
146         String decryptedKey;
147         String config = env.getProperty(propertyName);
148
149         if (config == null || "NULL".equals(config) || config.isEmpty()) {
150             return null;
151         }
152
153         try {
154             decryptedKey = CryptoUtils.decrypt(config, this.configKey);
155         } catch (GeneralSecurityException e) {
156             logger.debug("Exception while decrypting property: {}", propertyName, e);
157             return null;
158         }
159
160         if (decryptedKey.isEmpty()) {
161             return null;
162         } else {
163             return decryptedKey;
164         }
165     }
166
167     public boolean getBooleanPropertyWithDefault(String propertyName, boolean defaultValue) {
168         String config = env.getProperty(propertyName);
169         if (config == null || "NULL".equals(config) || config.isEmpty()) {
170             return defaultValue;
171         } else {
172             try {
173                 return Boolean.valueOf(config);
174             } catch (Exception e) {
175                 return defaultValue;
176             }
177         }
178     }
179
180     @Override
181     public String getEnvironmentName() {
182         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.environmentName");
183     }
184
185     @Override
186     public String getPassword() {
187         return getEncryptedPropertyOrNull("mso.asdc-connections.asdc-controller1.password");
188     }
189
190     @Override
191     public int getPollingInterval() {
192         return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.pollingInterval");
193     }
194
195     @Override
196     public List<String> getRelevantArtifactTypes() {
197         // DO not return the Static List SUPPORTED_ARTIFACT_TYPES_LIST because the ASDC Client will try to modify it !!!
198         return Arrays.asList(SUPPORTED_ARTIFACT_TYPES);
199     }
200
201     @Override
202     public String getUser() {
203         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.user");
204     }
205
206     @Override
207     public String getAsdcAddress() {
208         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.asdcAddress");
209     }
210
211     @Override
212     public int getPollingTimeout() {
213         return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.pollingTimeout");
214     }
215
216     @Override
217     public boolean activateServerTLSAuth() {
218         return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.activateServerTLSAuth", true);
219     }
220
221     @Override
222     public String getKeyStorePassword() {
223         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.keyStorePassword");
224     }
225
226     @Override
227     public String getKeyStorePath() {
228         return getPropertyOrNull("mso.asdc-connections.asdc-controller1.keyStorePath");
229     }
230
231     /**
232      * The flag allows the client to receive metadata for all resources of the service regardless of the artifacts
233      * associated to them. Setting the flag to false will preserve legacy behavior.
234      */
235     @Override
236     public boolean isFilterInEmptyResources() {
237         return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.isFilterInEmptyResources", true);
238     }
239
240 }