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