From 69644638aa0e93c9c2c2ccea590fa02213d24a7a Mon Sep 17 00:00:00 2001 From: Remigiusz Janeczek Date: Wed, 17 Jun 2020 17:52:56 +0200 Subject: Add external tls info to bpgenerator and component spec schema Also: - Fix issue where local run without import file caused exception instead of use of default imports. - Update blueprint generator version from 1.3.2 to 1.4.0 Issue-ID: DCAEGEN2-2251 Signed-off-by: Remigiusz Janeczek Change-Id: I2f976ccc3e0b271bf9ae1357f02bd86fe0903459 --- .../models/blueprint/ExternalTlsInfo.java | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/ExternalTlsInfo.java (limited to 'mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/ExternalTlsInfo.java') diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/ExternalTlsInfo.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/ExternalTlsInfo.java new file mode 100644 index 0000000..cf97dec --- /dev/null +++ b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/ExternalTlsInfo.java @@ -0,0 +1,153 @@ +/**============LICENSE_START======================================================= + org.onap.dcae + ================================================================================ + Copyright (c) 2020 Nokia. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ============LICENSE_END========================================================= + */ + +package org.onap.blueprintgenerator.models.blueprint; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.onap.blueprintgenerator.models.componentspec.ComponentSpec; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TreeMap; + +@Getter +@Setter +@NoArgsConstructor +public class ExternalTlsInfo { + + static final String USE_EXTERNAL_TLS_FIELD = "use_external_tls"; + + private static final String DEFAULT_CA = "RA"; + private static final Object DEFAULT_CERT_TYPE = "P12"; + + private static final String INPUT_PREFIX = "external_cert_"; + private static final String EXTERNAL_CERT_DIRECTORY_FIELD = "external_cert_directory"; + private static final String CA_NAME_FIELD = "ca_name"; + private static final String CERT_TYPE_FIELD = "cert_type"; + private static final String EXTERNAL_CERTIFICATE_PARAMETERS_FIELD = "external_certificate_parameters"; + + @JsonProperty(EXTERNAL_CERT_DIRECTORY_FIELD) + private String externalCertDirectory; + + @JsonProperty(USE_EXTERNAL_TLS_FIELD) + private GetInput useExternalTls; + + @JsonProperty(CA_NAME_FIELD) + private GetInput caName; + + @JsonProperty(CERT_TYPE_FIELD) + private GetInput certType; + + @JsonProperty(EXTERNAL_CERTIFICATE_PARAMETERS_FIELD) + private ExternalCertificateParameters externalCertificateParameters; + + static ExternalTlsInfo createFromComponentSpec(ComponentSpec cs) { + ExternalTlsInfo externalTlsInfoBp = new ExternalTlsInfo(); + TreeMap tlsInfoCs = cs.getAuxilary().getTls_info(); + + externalTlsInfoBp.setExternalCertDirectory((String) tlsInfoCs.get("cert_directory")); + externalTlsInfoBp.setUseExternalTls(createGetInput(USE_EXTERNAL_TLS_FIELD)); + externalTlsInfoBp.setCaName(createGetInput(CA_NAME_FIELD)); + externalTlsInfoBp.setCertType(createGetInput(CERT_TYPE_FIELD)); + + ExternalCertificateParameters externalCertificateParameters = + ExternalCertificateParameters.create(); + externalTlsInfoBp.setExternalCertificateParameters(externalCertificateParameters); + + return externalTlsInfoBp; + } + + static Map> createInputMapFromComponentSpec(ComponentSpec cs){ + Map> retInputs = new HashMap<>(); + + Map tlsInfoCs = cs.getAuxilary().getTls_info(); + LinkedHashMap useTlsFlagInput = Properties.makeInput("boolean", + "Flag to indicate external tls enable/disable.", + tlsInfoCs.get(USE_EXTERNAL_TLS_FIELD)); + retInputs.put(addPrefix(USE_EXTERNAL_TLS_FIELD), useTlsFlagInput); + + LinkedHashMap caNameInputMap = Properties.makeInput("string", + "Name of Certificate Authority configured on CertService side.", + DEFAULT_CA); + retInputs.put(addPrefix(CA_NAME_FIELD), caNameInputMap); + + LinkedHashMap certTypeInputMap = Properties.makeInput("string", + "Format of provided certificates", + DEFAULT_CERT_TYPE); + retInputs.put(addPrefix(CERT_TYPE_FIELD), certTypeInputMap); + + retInputs.putAll(ExternalCertificateParameters.createInputMap()); + return retInputs; + } + + private static GetInput createGetInput(String fieldName) { + return new GetInput(addPrefix(fieldName)); + } + + private static String addPrefix(String fieldName) { + return INPUT_PREFIX + fieldName; + } + + @Getter + @Setter + @NoArgsConstructor + public static class ExternalCertificateParameters { + + private static final String DEFAULT_COMMON_NAME = "sample.onap.org"; + private static final String DEFAULT_SANS = "sample.onap.org:component.sample.onap.org"; + + private static final String COMMON_NAME_FIELD = "common_name"; + private static final String SANS_FIELD = "sans"; + + @JsonProperty(COMMON_NAME_FIELD) + private GetInput commonName; + + @JsonProperty(SANS_FIELD) + private GetInput sans; + + + private static ExternalCertificateParameters create() { + ExternalCertificateParameters externalCertificateParameters = new ExternalCertificateParameters(); + externalCertificateParameters.setCommonName(createGetInput(COMMON_NAME_FIELD)); + externalCertificateParameters.setSans(createGetInput(SANS_FIELD)); + return externalCertificateParameters; + } + + private static Map> createInputMap(){ + Map> retInputs = new LinkedHashMap<>(); + + LinkedHashMap commonNameInputMap = Properties.makeInput("string", + "Common name which should be present in certificate.", + DEFAULT_COMMON_NAME); + retInputs.put(addPrefix(COMMON_NAME_FIELD), commonNameInputMap); + + LinkedHashMap sansInputMap = Properties.makeInput("string", + "\"List of Subject Alternative Names (SANs) which should be present in certificate. " + + "Delimiter - : Should contain common_name value and other FQDNs under which given " + + "component is accessible.\"", + DEFAULT_SANS); + retInputs.put(addPrefix(SANS_FIELD), sansInputMap); + return retInputs; + } + } +} -- cgit 1.2.3-korg