Add external tls info to bpgenerator and component spec schema
[dcaegen2/platform.git] / mod / bpgenerator / src / main / java / org / onap / blueprintgenerator / models / blueprint / ExternalTlsInfo.java
1 /**============LICENSE_START=======================================================
2  org.onap.dcae
3  ================================================================================
4  Copyright (c) 2020 Nokia. All rights reserved.
5  ================================================================================
6  Licensed under the Apache License, Version 2.0 (the "License");
7  you may not use this file except in compliance with the License.
8  You may obtain a copy of the License at
9
10  http://www.apache.org/licenses/LICENSE-2.0
11
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  See the License for the specific language governing permissions and
16  limitations under the License.
17  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.blueprintgenerator.models.blueprint;
21
22 import com.fasterxml.jackson.annotation.JsonProperty;
23 import lombok.Getter;
24 import lombok.NoArgsConstructor;
25 import lombok.Setter;
26 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
27
28 import java.util.HashMap;
29 import java.util.LinkedHashMap;
30 import java.util.Map;
31 import java.util.TreeMap;
32
33 @Getter
34 @Setter
35 @NoArgsConstructor
36 public class ExternalTlsInfo {
37
38         static final String USE_EXTERNAL_TLS_FIELD = "use_external_tls";
39
40         private static final String DEFAULT_CA = "RA";
41         private static final Object DEFAULT_CERT_TYPE = "P12";
42
43         private static final String INPUT_PREFIX = "external_cert_";
44         private static final String EXTERNAL_CERT_DIRECTORY_FIELD = "external_cert_directory";
45         private static final String CA_NAME_FIELD = "ca_name";
46         private static final String CERT_TYPE_FIELD = "cert_type";
47         private static final String EXTERNAL_CERTIFICATE_PARAMETERS_FIELD = "external_certificate_parameters";
48
49         @JsonProperty(EXTERNAL_CERT_DIRECTORY_FIELD)
50         private String externalCertDirectory;
51
52         @JsonProperty(USE_EXTERNAL_TLS_FIELD)
53         private GetInput useExternalTls;
54
55         @JsonProperty(CA_NAME_FIELD)
56         private GetInput caName;
57
58         @JsonProperty(CERT_TYPE_FIELD)
59         private GetInput certType;
60
61         @JsonProperty(EXTERNAL_CERTIFICATE_PARAMETERS_FIELD)
62         private ExternalCertificateParameters externalCertificateParameters;
63
64         static ExternalTlsInfo createFromComponentSpec(ComponentSpec cs) {
65                 ExternalTlsInfo externalTlsInfoBp = new ExternalTlsInfo();
66                 TreeMap<String, Object> tlsInfoCs = cs.getAuxilary().getTls_info();
67
68                 externalTlsInfoBp.setExternalCertDirectory((String) tlsInfoCs.get("cert_directory"));
69                 externalTlsInfoBp.setUseExternalTls(createGetInput(USE_EXTERNAL_TLS_FIELD));
70                 externalTlsInfoBp.setCaName(createGetInput(CA_NAME_FIELD));
71                 externalTlsInfoBp.setCertType(createGetInput(CERT_TYPE_FIELD));
72
73                 ExternalCertificateParameters externalCertificateParameters =
74                                 ExternalCertificateParameters.create();
75                 externalTlsInfoBp.setExternalCertificateParameters(externalCertificateParameters);
76
77                 return externalTlsInfoBp;
78         }
79
80         static Map<String, LinkedHashMap<String, Object>> createInputMapFromComponentSpec(ComponentSpec cs){
81                 Map<String, LinkedHashMap<String, Object>> retInputs = new HashMap<>();
82
83                 Map<String, Object> tlsInfoCs = cs.getAuxilary().getTls_info();
84                 LinkedHashMap<String, Object> useTlsFlagInput = Properties.makeInput("boolean",
85                                 "Flag to indicate external tls enable/disable.",
86                                 tlsInfoCs.get(USE_EXTERNAL_TLS_FIELD));
87                 retInputs.put(addPrefix(USE_EXTERNAL_TLS_FIELD), useTlsFlagInput);
88
89                 LinkedHashMap<String, Object> caNameInputMap = Properties.makeInput("string",
90                                 "Name of Certificate Authority configured on CertService side.",
91                                 DEFAULT_CA);
92                 retInputs.put(addPrefix(CA_NAME_FIELD), caNameInputMap);
93
94                 LinkedHashMap<String, Object> certTypeInputMap = Properties.makeInput("string",
95                                 "Format of provided certificates",
96                                 DEFAULT_CERT_TYPE);
97                 retInputs.put(addPrefix(CERT_TYPE_FIELD), certTypeInputMap);
98
99                 retInputs.putAll(ExternalCertificateParameters.createInputMap());
100                 return retInputs;
101         }
102
103         private static GetInput createGetInput(String fieldName) {
104                 return new GetInput(addPrefix(fieldName));
105         }
106
107         private static String addPrefix(String fieldName) {
108                 return INPUT_PREFIX + fieldName;
109         }
110
111         @Getter
112         @Setter
113         @NoArgsConstructor
114         public static class ExternalCertificateParameters {
115
116                 private static final String DEFAULT_COMMON_NAME = "sample.onap.org";
117                 private static final String DEFAULT_SANS = "sample.onap.org:component.sample.onap.org";
118
119                 private static final String COMMON_NAME_FIELD = "common_name";
120                 private static final String SANS_FIELD = "sans";
121
122                 @JsonProperty(COMMON_NAME_FIELD)
123                 private GetInput commonName;
124
125                 @JsonProperty(SANS_FIELD)
126                 private GetInput sans;
127
128
129                 private static ExternalCertificateParameters create() {
130                         ExternalCertificateParameters externalCertificateParameters = new ExternalCertificateParameters();
131                         externalCertificateParameters.setCommonName(createGetInput(COMMON_NAME_FIELD));
132                         externalCertificateParameters.setSans(createGetInput(SANS_FIELD));
133                         return externalCertificateParameters;
134                 }
135
136                 private static Map<String, LinkedHashMap<String, Object>> createInputMap(){
137                         Map<String, LinkedHashMap<String, Object>> retInputs = new LinkedHashMap<>();
138
139                         LinkedHashMap<String, Object> commonNameInputMap = Properties.makeInput("string",
140                                         "Common name which should be present in certificate.",
141                                         DEFAULT_COMMON_NAME);
142                         retInputs.put(addPrefix(COMMON_NAME_FIELD), commonNameInputMap);
143
144                         LinkedHashMap<String, Object> sansInputMap = Properties.makeInput("string",
145                                         "\"List of Subject Alternative Names (SANs) which should be present in certificate. " +
146                                                         "Delimiter - : Should contain common_name value and other FQDNs under which given " +
147                                                         "component is accessible.\"",
148                                         DEFAULT_SANS);
149                         retInputs.put(addPrefix(SANS_FIELD), sansInputMap);
150                         return retInputs;
151                 }
152         }
153 }