1 /**============LICENSE_START=======================================================
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
10 http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.onap.blueprintgenerator.models.blueprint;
22 import com.fasterxml.jackson.annotation.JsonProperty;
24 import lombok.NoArgsConstructor;
26 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
28 import java.util.HashMap;
29 import java.util.LinkedHashMap;
31 import java.util.TreeMap;
36 public class ExternalTlsInfo {
38 static final String USE_EXTERNAL_TLS_FIELD = "use_external_tls";
40 private static final String DEFAULT_CA = "RA";
41 private static final Object DEFAULT_CERT_TYPE = "P12";
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";
49 @JsonProperty(EXTERNAL_CERT_DIRECTORY_FIELD)
50 private String externalCertDirectory;
52 @JsonProperty(USE_EXTERNAL_TLS_FIELD)
53 private GetInput useExternalTls;
55 @JsonProperty(CA_NAME_FIELD)
56 private GetInput caName;
58 @JsonProperty(CERT_TYPE_FIELD)
59 private GetInput certType;
61 @JsonProperty(EXTERNAL_CERTIFICATE_PARAMETERS_FIELD)
62 private ExternalCertificateParameters externalCertificateParameters;
64 static ExternalTlsInfo createFromComponentSpec(ComponentSpec cs) {
65 ExternalTlsInfo externalTlsInfoBp = new ExternalTlsInfo();
66 TreeMap<String, Object> tlsInfoCs = cs.getAuxilary().getTls_info();
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));
73 ExternalCertificateParameters externalCertificateParameters =
74 ExternalCertificateParameters.create();
75 externalTlsInfoBp.setExternalCertificateParameters(externalCertificateParameters);
77 return externalTlsInfoBp;
80 static Map<String, LinkedHashMap<String, Object>> createInputMapFromComponentSpec(ComponentSpec cs){
81 Map<String, LinkedHashMap<String, Object>> retInputs = new HashMap<>();
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);
89 LinkedHashMap<String, Object> caNameInputMap = Properties.makeInput("string",
90 "Name of Certificate Authority configured on CertService side.",
92 retInputs.put(addPrefix(CA_NAME_FIELD), caNameInputMap);
94 LinkedHashMap<String, Object> certTypeInputMap = Properties.makeInput("string",
95 "Format of provided certificates",
97 retInputs.put(addPrefix(CERT_TYPE_FIELD), certTypeInputMap);
99 retInputs.putAll(ExternalCertificateParameters.createInputMap());
103 private static GetInput createGetInput(String fieldName) {
104 return new GetInput(addPrefix(fieldName));
107 private static String addPrefix(String fieldName) {
108 return INPUT_PREFIX + fieldName;
114 public static class ExternalCertificateParameters {
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";
119 private static final String COMMON_NAME_FIELD = "common_name";
120 private static final String SANS_FIELD = "sans";
122 @JsonProperty(COMMON_NAME_FIELD)
123 private GetInput commonName;
125 @JsonProperty(SANS_FIELD)
126 private GetInput sans;
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;
136 private static Map<String, LinkedHashMap<String, Object>> createInputMap(){
137 Map<String, LinkedHashMap<String, Object>> retInputs = new LinkedHashMap<>();
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);
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.\"",
149 retInputs.put(addPrefix(SANS_FIELD), sansInputMap);