2 * ============LICENSE_START=======================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
23 package org.onap.so.asdc.client;
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;
40 public class ASDCConfiguration implements IConfiguration {
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
45 private static Logger logger = LoggerFactory.getLogger(ASDCConfiguration.class);
48 private String asdcControllerName;
50 public static final String MSO_PROP_ASDC = "MSO_PROP_ASDC";
51 public static final String PARAMETER_PATTERN = "asdc-connections";
52 public static final String MSG_BUS_ADDRESS_ATTRIBUTE_NAME = "messageBusAddress";
53 public static final String WATCHDOG_TIMEOUT_NAME = "watchDogTimeout";
55 public static final String CONSUMER_GROUP_ATTRIBUTE_NAME = "consumerGroup";
56 public static final String CONSUMER_ID_ATTRIBUTE_NAME = "consumerId";
57 public static final String ENVIRONMENT_NAME_ATTRIBUTE_NAME = "environmentName";
58 public static final String PASSWORD_ATTRIBUTE_NAME = "password";
59 public static final String POLLING_INTERVAL_ATTRIBUTE_NAME = "pollingInterval";
60 public static final String RELEVANT_ARTIFACT_TYPES_ATTRIBUTE_NAME = "relevantArtifactTypes";
61 public static final String USER_ATTRIBUTE_NAME = "user";
62 public static final String ASDC_ADDRESS_ATTRIBUTE_NAME = "asdcAddress";
63 public static final String POLLING_TIMEOUT_ATTRIBUTE_NAME = "pollingTimeout";
64 public static final String ACTIVATE_SERVER_TLS_AUTH = "activateServerTLSAuth";
65 public static final String KEY_STORE_PASSWORD = "keyStorePassword";
66 public static final String KEY_STORE_PATH = "keyStorePath";
68 public static final String HEAT = "HEAT";
69 public static final String HEAT_ARTIFACT = "HEAT_ARTIFACT";
70 public static final String HEAT_ENV = "HEAT_ENV";
71 public static final String HEAT_NESTED = "HEAT_NESTED";
72 public static final String HEAT_NET = "HEAT_NET";
73 public static final String HEAT_VOL = "HEAT_VOL";
74 public static final String OTHER = "OTHER";
75 public static final String TOSCA_CSAR = "TOSCA_CSAR";
76 public static final String WORKFLOWS = "Workflows";
77 public static final String VF_MODULES_METADATA = "VF_MODULES_METADATA";
79 private static final String[] SUPPORTED_ARTIFACT_TYPES =
80 {HEAT, HEAT_ARTIFACT, HEAT_ENV, HEAT_NESTED, HEAT_NET, HEAT_VOL, OTHER, TOSCA_CSAR, VF_MODULES_METADATA};
82 public static final List<String> SUPPORTED_ARTIFACT_TYPES_LIST =
83 Collections.unmodifiableList(Arrays.asList(SUPPORTED_ARTIFACT_TYPES));
86 private Environment env;
88 @Value("${mso.asdc.config.key}")
89 private String configKey;
91 @Value("${mso.asdc-connections.asdc-controller1.messageBusAddress}")
92 private String[] messageBusAddress;
95 public void setAsdcControllerName(String asdcControllerName) {
96 this.asdcControllerName = asdcControllerName;
100 public java.lang.Boolean isUseHttpsWithDmaap() {
101 return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.useHttpsWithDmaap", true);
105 public boolean isConsumeProduceStatusTopic() {
110 public List<String> getMsgBusAddress() {
111 if (messageBusAddress.length > 0) {
112 return Arrays.asList(messageBusAddress);
114 return Collections.emptyList();
120 public String getAsdcControllerName() {
121 return asdcControllerName;
126 public String getConsumerGroup() {
127 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.consumerGroup");
130 public int getWatchDogTimeout() {
131 return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.watchDogTimeout");
136 public String getConsumerID() {
137 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.consumerId");
140 public int getIntegerPropertyOrZero(String propertyName) {
141 String property = env.getProperty(propertyName);
142 if (property == null || "NULL".equals(property) || property.isEmpty()) {
146 return Integer.parseInt(property);
147 } catch (NumberFormatException e) {
153 public String getPropertyOrNull(String propertyName) {
154 String config = env.getProperty(propertyName);
155 if (config == null || "NULL".equals(config) || config.isEmpty()) {
162 public String getEncryptedPropertyOrNull(String propertyName) {
164 String config = env.getProperty(propertyName);
166 if (config == null || "NULL".equals(config) || config.isEmpty()) {
171 decryptedKey = CryptoUtils.decrypt(config, this.configKey);
172 } catch (GeneralSecurityException e) {
173 logger.debug("Exception while decrypting property: {}", propertyName, e);
177 if (decryptedKey.isEmpty()) {
184 public boolean getBooleanPropertyWithDefault(String propertyName, boolean defaultValue) {
185 String config = env.getProperty(propertyName);
186 if (config == null || "NULL".equals(config) || config.isEmpty()) {
190 return Boolean.valueOf(config);
191 } catch (Exception e) {
198 public String getEnvironmentName() {
199 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.environmentName");
203 public String getPassword() {
204 return getEncryptedPropertyOrNull("mso.asdc-connections.asdc-controller1.password");
208 public int getPollingInterval() {
209 return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.pollingInterval");
213 public List<String> getRelevantArtifactTypes() {
214 // DO not return the Static List SUPPORTED_ARTIFACT_TYPES_LIST because the ASDC Client will try to modify it !!!
215 return Arrays.asList(SUPPORTED_ARTIFACT_TYPES);
219 public String getUser() {
220 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.user");
224 public String getAsdcAddress() {
225 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.asdcAddress");
229 public int getPollingTimeout() {
230 return getIntegerPropertyOrZero("mso.asdc-connections.asdc-controller1.pollingTimeout");
234 public boolean activateServerTLSAuth() {
235 return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.activateServerTLSAuth", true);
239 public String getKeyStorePassword() {
240 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.keyStorePassword");
244 public String getKeyStorePath() {
245 return getPropertyOrNull("mso.asdc-connections.asdc-controller1.keyStorePath");
249 * The flag allows the client to receive metadata for all resources of the service regardless of the artifacts
250 * associated to them. Setting the flag to false will preserve legacy behavior.
253 public boolean isFilterInEmptyResources() {
254 return getBooleanPropertyWithDefault("mso.asdc-connections.asdc-controller1.isFilterInEmptyResources", true);