Add grpc TLS property lib services.
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / commons / grpc-lib / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / grpc / service / BluePrintGrpcLibPropertyService.kt
index a1d2188..f4933a3 100644 (file)
@@ -1,5 +1,6 @@
 /*
  *  Copyright © 2019 IBM.
+ *  Modifications Copyright © 2018-2019 AT&T Intellectual Property.
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -18,17 +19,56 @@ package org.onap.ccsdk.cds.blueprintsprocessor.grpc.service
 
 import com.fasterxml.jackson.databind.JsonNode
 import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintProperties
-import org.onap.ccsdk.cds.blueprintsprocessor.grpc.BasicAuthGrpcClientProperties
-import org.onap.ccsdk.cds.blueprintsprocessor.grpc.GRPCLibConstants
-import org.onap.ccsdk.cds.blueprintsprocessor.grpc.GrpcClientProperties
-import org.onap.ccsdk.cds.blueprintsprocessor.grpc.TokenAuthGrpcClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.grpc.*
 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.cds.controllerblueprints.core.returnNullIfMissing
 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
 import org.springframework.stereotype.Service
 
 @Service(GRPCLibConstants.SERVICE_BLUEPRINT_GRPC_LIB_PROPERTY)
 open class BluePrintGrpcLibPropertyService(private var bluePrintProperties: BluePrintProperties) {
 
+    /** GRPC Server Lib Property Service */
+    fun grpcServerProperties(jsonNode: JsonNode): GrpcServerProperties {
+        return when (val type = jsonNode.get("type").textValue()) {
+            GRPCLibConstants.TYPE_TOKEN_AUTH -> {
+                JacksonUtils.readValue(jsonNode, TokenAuthGrpcServerProperties::class.java)!!
+            }
+            GRPCLibConstants.TYPE_TLS_AUTH -> {
+                JacksonUtils.readValue(jsonNode, TLSAuthGrpcServerProperties::class.java)!!
+            }
+            else -> {
+                throw BluePrintProcessorException("Grpc type($type) not supported")
+            }
+        }
+    }
+
+    fun grpcServerProperties(prefix: String): GrpcServerProperties {
+        val type = bluePrintProperties.propertyBeanType(
+                "$prefix.type", String::class.java)
+        return when (type) {
+            GRPCLibConstants.TYPE_TOKEN_AUTH -> {
+                tokenAuthGrpcServerProperties(prefix)
+            }
+            GRPCLibConstants.TYPE_TLS_AUTH -> {
+                tlsAuthGrpcServerProperties(prefix)
+            }
+            else -> {
+                throw BluePrintProcessorException("Grpc type($type) not supported")
+            }
+        }
+    }
+
+    private fun tokenAuthGrpcServerProperties(prefix: String): TokenAuthGrpcServerProperties {
+        return bluePrintProperties.propertyBeanType(prefix, TokenAuthGrpcServerProperties::class.java)
+    }
+
+    private fun tlsAuthGrpcServerProperties(prefix: String): TLSAuthGrpcServerProperties {
+        return bluePrintProperties.propertyBeanType(prefix, TLSAuthGrpcServerProperties::class.java)
+    }
+
+    /** GRPC Client Lib Property Service */
+
     fun blueprintGrpcClientService(jsonNode: JsonNode): BluePrintGrpcClientService {
         val restClientProperties = grpcClientProperties(jsonNode)
         return blueprintGrpcClientService(restClientProperties)
@@ -42,11 +82,15 @@ open class BluePrintGrpcLibPropertyService(private var bluePrintProperties: Blue
 
 
     fun grpcClientProperties(jsonNode: JsonNode): GrpcClientProperties {
-        val type = jsonNode.get("type").textValue()
+        val type = jsonNode.get("type").returnNullIfMissing()?.textValue()
+                ?: BluePrintProcessorException("missing type property")
         return when (type) {
             GRPCLibConstants.TYPE_TOKEN_AUTH -> {
                 JacksonUtils.readValue(jsonNode, TokenAuthGrpcClientProperties::class.java)!!
             }
+            GRPCLibConstants.TYPE_TLS_AUTH -> {
+                JacksonUtils.readValue(jsonNode, TLSAuthGrpcClientProperties::class.java)!!
+            }
             GRPCLibConstants.TYPE_BASIC_AUTH -> {
                 JacksonUtils.readValue(jsonNode, BasicAuthGrpcClientProperties::class.java)!!
             }
@@ -63,6 +107,9 @@ open class BluePrintGrpcLibPropertyService(private var bluePrintProperties: Blue
             GRPCLibConstants.TYPE_TOKEN_AUTH -> {
                 tokenAuthGrpcClientProperties(prefix)
             }
+            GRPCLibConstants.TYPE_TLS_AUTH -> {
+                tlsAuthGrpcClientProperties(prefix)
+            }
             GRPCLibConstants.TYPE_BASIC_AUTH -> {
                 basicAuthGrpcClientProperties(prefix)
             }
@@ -75,12 +122,15 @@ open class BluePrintGrpcLibPropertyService(private var bluePrintProperties: Blue
 
     fun blueprintGrpcClientService(grpcClientProperties: GrpcClientProperties):
             BluePrintGrpcClientService {
-        when (grpcClientProperties) {
+        return when (grpcClientProperties) {
             is TokenAuthGrpcClientProperties -> {
-                return TokenAuthGrpcClientService(grpcClientProperties)
+                TokenAuthGrpcClientService(grpcClientProperties)
+            }
+            is TLSAuthGrpcClientProperties -> {
+                TLSAuthGrpcClientService(grpcClientProperties)
             }
             is BasicAuthGrpcClientProperties -> {
-                return BasicAuthGrpcClientService(grpcClientProperties)
+                BasicAuthGrpcClientService(grpcClientProperties)
             }
             else -> {
                 throw BluePrintProcessorException("couldn't get grpc service for type(${grpcClientProperties.type})")
@@ -92,6 +142,10 @@ open class BluePrintGrpcLibPropertyService(private var bluePrintProperties: Blue
         return bluePrintProperties.propertyBeanType(prefix, TokenAuthGrpcClientProperties::class.java)
     }
 
+    private fun tlsAuthGrpcClientProperties(prefix: String): TLSAuthGrpcClientProperties {
+        return bluePrintProperties.propertyBeanType(prefix, TLSAuthGrpcClientProperties::class.java)
+    }
+
     private fun basicAuthGrpcClientProperties(prefix: String): BasicAuthGrpcClientProperties {
         return bluePrintProperties.propertyBeanType(prefix, BasicAuthGrpcClientProperties::class.java)
     }