Implement truststore & keystore handling for cassandra
[sdc.git] / common-app-api / src / main / java / org / openecomp / sdc / be / config / Configuration.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.config;
22
23 import static java.lang.String.format;
24 import static java.util.Collections.emptyMap;
25
26 import java.util.Collections;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31 import lombok.Getter;
32 import lombok.NoArgsConstructor;
33 import lombok.Setter;
34 import lombok.ToString;
35 import org.apache.commons.collections.CollectionUtils;
36 import org.apache.commons.collections.map.CaseInsensitiveMap;
37 import org.openecomp.sdc.common.api.BasicConfiguration;
38
39 @Getter
40 @Setter
41 @NoArgsConstructor
42 public class Configuration extends BasicConfiguration {
43
44     private List<String> identificationHeaderFields;
45     /**
46      * Requests from these Urls will not be logged by org.openecomp.sdc.be.filters.BeServletFilter.<br>
47      **/
48     private List<String> unLoggedUrls;
49     /**
50      * backend host
51      */
52     private String beFqdn;
53     /**
54      * backend http port
55      */
56     private Integer beHttpPort;
57     /**
58      * backend http secured port
59      */
60     private Integer beSslPort;
61     /**
62      * be http context
63      */
64     private String beContext;
65     /**
66      * backend protocol. http | https
67      */
68     private String beProtocol = "http";
69     private String tlsCert;
70     private String tlsKey;
71     private String caCert;
72     private Date released;
73     private String version = "1111";
74     private String toscaConformanceLevel = "3.0";
75     private String minToscaConformanceLevel = "3.0";
76     private List<String> protocols;
77     private Map<String, String> users;
78     private Map<String, Object> neo4j;
79     private String janusGraphCfgFile;
80     private String janusGraphMigrationKeySpaceCfgFile;
81     private Boolean janusGraphInMemoryGraph;
82     private int startMigrationFrom;
83     private Long janusGraphLockTimeout;
84     private Long janusGraphReconnectIntervalInSeconds;
85     private List<String> healthStatusExclude;
86     private Long janusGraphHealthCheckReadTimeout;
87     private Long uebHealthCheckReconnectIntervalInSeconds;
88     private Long uebHealthCheckReadTimeout;
89     private List<Map<String, Map<String, String>>> defaultImports;
90     private List<String> globalCsarImports;
91     private List<String> resourceTypes;
92     private List<String> excludeResourceCategory;
93     private List<String> excludeResourceType;
94     private Map<String, Set<String>> excludedPolicyTypesMapping;
95     private Map<String, Set<String>> excludedGroupTypesMapping;
96     private Map<String, Object> deploymentResourceArtifacts;
97     private Map<String, Object> deploymentResourceInstanceArtifacts;
98     private Map<String, Object> toscaArtifacts;
99     private Map<String, Object> informationalResourceArtifacts;
100     private Map<String, Object> informationalServiceArtifacts;
101     private Map<String, Object> serviceApiArtifacts;
102     private List<String> excludeServiceCategory;
103     private List<String> licenseTypes;
104     private List<String> definedResourceNamespace;
105     private List<String> directives;
106     private List<CustomToscaFunction> defaultCustomToscaFunctions;
107     private Integer additionalInformationMaxNumberOfKeys;
108     private HeatDeploymentArtifactTimeout heatArtifactDeploymentTimeout;
109     private BeMonitoringConfig systemMonitoring;
110     private CleanComponentsConfiguration cleanComponentsConfiguration;
111     private String artifactsIndex;
112     private String heatEnvArtifactHeader;
113     private String heatEnvArtifactFooter;
114     private String toscaFilesDir;
115     private String heatTranslatorPath;
116     private OnboardingConfig onboarding;
117     private BasicAuthConfig basicAuth;
118     private CassandrConfig cassandraConfig;
119     private SwitchoverDetectorConfig switchoverDetector;
120     private ApplicationL1CacheConfig applicationL1Cache;
121     private ApplicationL2CacheConfig applicationL2Cache;
122     private ToscaValidatorsConfig toscaValidators;
123     private boolean disableAudit;
124     private Map<String, VfModuleProperty> vfModuleProperties;
125     private Map<String, String> genericAssetNodeTypes;
126     private Map<String, CategoryBaseTypeConfig> serviceBaseNodeTypes;
127     private Map<String, Map<String, String>> resourceNodeTypes;
128     private String appVersion;
129     private String artifactGeneratorConfig;
130     private String autoHealingOwner;
131     private boolean enableAutoHealing;
132     private Map<String, List<String>> resourcesForUpgrade;
133     private DmaapConsumerConfiguration dmaapConsumerConfiguration;
134     private DmaapProducerConfiguration dmaapProducerConfiguration;
135     private boolean skipUpgradeFailedVfs;
136     private boolean skipUpgradeVSPs;
137     private DmeConfiguration dmeConfiguration;
138     private boolean supportAllottedResourcesAndProxy;
139     private Integer deleteLockTimeoutInSeconds;
140     private Integer maxDeleteComponents;
141     private String workloadContext;
142     private EnvironmentContext environmentContext;
143     private List<GabConfig> gabConfig;
144     private EcompPortalConfig ecompPortal;
145     private List<ArtifactConfiguration> artifacts;
146     private Map<String, Map<String, List<String>>> componentAllowedInstanceTypes;
147     private ExternalCsarStore externalCsarStore;
148     private CsarFormat csarFormat;
149     private String componentInstanceCounterDelimiter;
150     private String dataValidatorFilterExcludedUrls; // Comma separated list of excluded URLs by the DataValidatorFilter
151     private String permittedAncestors; // Space separated list of permitted ancestors
152
153     @SuppressWarnings("unchecked")
154     private <K, V> Map<K, V> safeGetCapsInsensitiveMap(Map<K, V> map) {
155         return map == null ? emptyMap() : new CaseInsensitiveMap(map);
156     }
157
158     public Long getJanusGraphHealthCheckReadTimeout(long defaultVal) {
159         return janusGraphHealthCheckReadTimeout == null ? defaultVal : janusGraphHealthCheckReadTimeout;
160     }
161
162     public Long getJanusGraphReconnectIntervalInSeconds(long defaultVal) {
163         return janusGraphReconnectIntervalInSeconds == null ? defaultVal : janusGraphReconnectIntervalInSeconds;
164     }
165
166     public Map<String, Set<String>> getExcludedPolicyTypesMapping() {
167         return safeGetCapsInsensitiveMap(excludedPolicyTypesMapping);
168     }
169
170     public Map<String, Set<String>> getExcludedGroupTypesMapping() {
171         return safeGetCapsInsensitiveMap(excludedGroupTypesMapping);
172     }
173
174     public List<Map<String, Map<String, String>>> getDefaultImports() {
175         return Collections.unmodifiableList(defaultImports);
176     }
177
178     @Override
179     public String toString() {
180         return new StringBuilder().append(format("backend host: %s%n", beFqdn)).append(format("backend http port: %s%n", beHttpPort))
181             .append(format("backend ssl port: %s%n", beSslPort)).append(format("backend context: %s%n", beContext))
182             .append(format("backend protocol: %s%n", beProtocol)).append(format("Version: %s%n", version)).append(format("Released: %s%n", released))
183             .append(format("Supported protocols: %s%n", protocols)).append(format("Users: %s%n", users)).append(format("Neo4j: %s%n", neo4j))
184             .append(format("JanusGraph Cfg File: %s%n", janusGraphCfgFile)).append(format("JanusGraph In memory: %s%n", janusGraphInMemoryGraph))
185             .append(format("JanusGraph lock timeout: %s%n", janusGraphLockTimeout))
186             .append(format("JanusGraph reconnect interval seconds: %s%n", janusGraphReconnectIntervalInSeconds))
187             .append(format("excludeResourceCategory: %s%n", excludeResourceCategory))
188             .append(format("informationalResourceArtifacts: %s%n", informationalResourceArtifacts))
189             .append(format("deploymentResourceArtifacts: %s%n", deploymentResourceArtifacts))
190             .append(format("informationalServiceArtifacts: %s%n", informationalServiceArtifacts))
191             .append(format("Supported artifacts types: %s%n", artifacts)).append(format("Supported license types: %s%n", licenseTypes))
192             .append(format("Additional information Maximum number of preoperties: %s%n", additionalInformationMaxNumberOfKeys))
193             .append(format("Heat Artifact Timeout in Minutes: %s%n", heatArtifactDeploymentTimeout))
194             .append(format("URLs For HTTP Requests that will not be automatically logged : %s%n", unLoggedUrls))
195             .append(format("Service Api Artifacts: %s%n", serviceApiArtifacts))
196             .append(format("heat env artifact header: %s%n", heatEnvArtifactHeader))
197             .append(format("heat env artifact footer: %s%n", heatEnvArtifactFooter)).append(format("onboarding: %s%n", onboarding)).toString();
198     }
199
200     public List<String> getGlobalCsarImports() {
201         if (CollectionUtils.isEmpty(globalCsarImports)) {
202             return Collections.emptyList();
203         }
204         return globalCsarImports;
205     }
206
207     @Getter
208     @Setter
209     @NoArgsConstructor
210     public static class CassandrConfig {
211
212         private static final Integer CASSANDRA_DEFAULT_PORT = 9042;
213         private List<String> cassandraHosts;
214         private Integer cassandraPort;
215         private String localDataCenter;
216         private Long reconnectTimeout;
217         private Integer socketReadTimeout;
218         private Integer socketConnectTimeout;
219         private List<KeyspaceConfig> keySpaces;
220         private boolean authenticate;
221         private String username;
222         private String password;
223         private boolean ssl;
224         private String keystorePath;
225         private String keystorePassword;
226         private String truststorePath;
227         private String truststorePassword;
228         private int maxWaitSeconds = 120;
229
230         public Integer getCassandraPort() {
231             return cassandraPort != null ? cassandraPort : CASSANDRA_DEFAULT_PORT;
232         }
233
234         @Getter
235         @Setter
236         @NoArgsConstructor
237         public static class KeyspaceConfig {
238
239             private String name;
240             private String replicationStrategy;
241             private List<String> replicationInfo;
242         }
243     }
244
245     @Getter
246     @Setter
247     @NoArgsConstructor
248     public static class SwitchoverDetectorConfig {
249
250         private String gBeFqdn;
251         private String gFeFqdn;
252         private String beVip;
253         private String feVip;
254         private int beResolveAttempts;
255         private int feResolveAttempts;
256         private Boolean enabled;
257         private long interval;
258         private String changePriorityUser;
259         private String changePriorityPassword;
260         private String publishNetworkUrl;
261         private String publishNetworkBody;
262         private Map<String, GroupInfo> groups;
263
264         public String getgBeFqdn() {
265             return gBeFqdn;
266         }
267
268         public void setgBeFqdn(String gBeFqdn) {
269             this.gBeFqdn = gBeFqdn;
270         }
271
272         public String getgFeFqdn() {
273             return gFeFqdn;
274         }
275
276         public void setgFeFqdn(String gFeFqdn) {
277             this.gFeFqdn = gFeFqdn;
278         }
279
280         @Getter
281         @Setter
282         @NoArgsConstructor
283         public static class GroupInfo {
284
285             String changePriorityUrl;
286             String changePriorityBody;
287         }
288     }
289
290     @Getter
291     @Setter
292     @NoArgsConstructor
293     @ToString
294     public static class HeatDeploymentArtifactTimeout {
295
296         private Integer defaultMinutes;
297         private Integer minMinutes;
298         private Integer maxMinutes;
299     }
300
301     @Getter
302     @Setter
303     @NoArgsConstructor
304     public static class BeMonitoringConfig {
305
306         private Boolean enabled;
307         private Boolean isProxy;
308         private Integer probeIntervalInSeconds;
309
310         public Integer getProbeIntervalInSeconds(int defaultVal) {
311             return probeIntervalInSeconds == null ? defaultVal : probeIntervalInSeconds;
312         }
313     }
314
315     @Getter
316     @Setter
317     @NoArgsConstructor
318     public static class ArtifactTypeConfig {
319
320         private List<String> acceptedTypes;
321         private List<String> validForResourceTypes;
322     }
323
324     @Getter
325     @Setter
326     @NoArgsConstructor
327     @ToString
328     public static class OnboardingConfig {
329
330         private String protocol = "http";
331         private String host;
332         private Integer port;
333         private String getLatestVspPackageUri;
334         private String getVspPackageUri;
335         private String getVspUri;
336         private String getLatestVspUri;
337         @ToString.Exclude
338         private String healthCheckUri;
339     }
340
341     @Getter
342     @Setter
343     @NoArgsConstructor
344     public static class BasicAuthConfig {
345
346         private boolean enabled;
347         private String userName;
348         private String userPass;
349         private String excludedUrls;
350     }
351
352     @Getter
353     @Setter
354     @NoArgsConstructor
355     @ToString(onlyExplicitlyIncluded = true)
356     public static class EcompPortalConfig {
357
358         private String protocol = "https";
359         private String host;
360         private Integer port;
361         private String healthCheckUri;
362         @ToString.Include
363         private String defaultFunctionalMenu;
364         private Integer pollingInterval;
365         private Integer timeoutMs;
366     }
367
368     @Getter
369     @Setter
370     @NoArgsConstructor
371     @ToString
372     public static class ApplicationL1CacheConfig {
373
374         private ApplicationL1CacheInfo datatypes;
375     }
376
377     @Getter
378     @Setter
379     @NoArgsConstructor
380     @ToString
381     public static class ApplicationL2CacheConfig {
382
383         private boolean enabled;
384         private ApplicationL1CacheCatalogInfo catalogL1Cache;
385         @ToString.Exclude
386         private QueueInfo queue;
387     }
388
389     @Getter
390     @Setter
391     @NoArgsConstructor
392     @ToString
393     public static class ToscaValidatorsConfig {
394
395         private Integer stringMaxLength;
396     }
397
398     @Getter
399     @Setter
400     @NoArgsConstructor
401     @ToString
402     public static class ApplicationL1CacheInfo {
403
404         private Boolean enabled;
405         private Integer firstRunDelay;
406         private Integer pollIntervalInSec;
407     }
408
409     @Getter
410     @Setter
411     @NoArgsConstructor
412     @ToString
413     public static class ApplicationL1CacheCatalogInfo {
414
415         private Boolean enabled;
416         private Integer resourcesSizeInCache;
417         private Integer servicesSizeInCache;
418         private Integer productsSizeInCache;
419     }
420
421     @Getter
422     @Setter
423     @NoArgsConstructor
424     @ToString
425     public static class QueueInfo {
426
427         private Integer waitOnShutDownInMinutes;
428         private Integer syncIntervalInSecondes;
429         private Integer numberOfCacheWorkers;
430     }
431
432     @Getter
433     @Setter
434     @NoArgsConstructor
435     public static class EnvironmentContext {
436
437         private String defaultValue;
438         private List<String> validValues;
439     }
440
441     @Getter
442     @Setter
443     @NoArgsConstructor
444     public static class VfModuleProperty {
445
446         private String forBaseModule;
447         private String forNonBaseModule;
448     }
449
450     @Getter
451     @Setter
452     @NoArgsConstructor
453     public static class PathsAndNamesDefinition {
454
455         private String friendlyName;
456         private String path;
457         private Boolean searchable;
458     }
459
460     @Getter
461     @Setter
462     @NoArgsConstructor
463     public static class GabConfig {
464
465         private String artifactType;
466         private List<PathsAndNamesDefinition> pathsAndNamesDefinitions;
467     }
468
469     @Getter
470     @Setter
471     @NoArgsConstructor
472     public static class ExternalCsarStore {
473
474         private String storageType;
475         private Endpoint endpoint;
476         private Credentials credentials;
477         private String tempPath;
478         private int uploadPartSize;
479
480         @Getter
481         @Setter
482         @NoArgsConstructor
483         public static class Endpoint {
484
485             private String host;
486             private int port;
487             private boolean secure;
488         }
489
490         @Getter
491         @Setter
492         @NoArgsConstructor
493         public static class Credentials {
494
495             private String accessKey;
496             private String secretKey;
497         }
498     }
499
500     @Getter
501     @Setter
502     @NoArgsConstructor
503     public static class CsarFormat {
504
505         private String defaultFormat;
506     }
507
508     @Getter
509     @Setter
510     @NoArgsConstructor
511     public static class CustomToscaFunction {
512
513         private String name;
514         private String type;
515     }
516
517 }