Add support for CDS basic auth 76/79676/2
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Tue, 5 Mar 2019 02:54:03 +0000 (21:54 -0500)
committerAlexis de Talhouët <adetalhouet89@gmail.com>
Tue, 5 Mar 2019 02:55:03 +0000 (02:55 +0000)
Change-Id: Ib7fcf41500ac7e9f8dc5f7670c5dd4a9206e5e23
Issue-ID: CCSDK-1055
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
grpc-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/grpc/GrpcProperties.java
grpc-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/grpc/cds/BasicAuthClientInterceptor.java [new file with mode: 0644]
grpc-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/grpc/cds/BlueprintProcessingClient.java
grpc-resource/provider/src/main/resources/grpc.properties
grpc-resource/provider/src/test/java/org/onap/ccsdk/sli/adaptors/grpc/cds/BlueprintProcessingClientTest.java

index 96775f3..ff158c2 100644 (file)
@@ -36,6 +36,7 @@ public class GrpcProperties {
 
     private static final String BLUEPRINT_PROCESSOR_URL_PROP = "org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.url";
     private static final String BLUEPRINT_PROCESSOR_PORT_PROP = "org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.port";
+    private static final String BLUEPRINT_PROCESSOR_AUTH_PROP = "org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.auth";
 
     private Properties properties;
 
@@ -47,6 +48,10 @@ public class GrpcProperties {
         return properties.getProperty(BLUEPRINT_PROCESSOR_URL_PROP);
     }
 
+    public String getAuth() {
+        return properties.getProperty(BLUEPRINT_PROCESSOR_AUTH_PROP);
+    }
+
     public int getPort() {
         return Integer.parseInt(properties.getProperty(BLUEPRINT_PROCESSOR_PORT_PROP));
     }
diff --git a/grpc-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/grpc/cds/BasicAuthClientInterceptor.java b/grpc-resource/provider/src/main/java/org/onap/ccsdk/sli/adaptors/grpc/cds/BasicAuthClientInterceptor.java
new file mode 100644 (file)
index 0000000..5d2e848
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2019 Bell Canada.
+ *
+ * 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.
+ */
+package org.onap.ccsdk.sli.adaptors.grpc.cds;
+
+import io.grpc.CallOptions;
+import io.grpc.Channel;
+import io.grpc.ClientCall;
+import io.grpc.ClientInterceptor;
+import io.grpc.ForwardingClientCall;
+import io.grpc.Metadata;
+import io.grpc.Metadata.Key;
+import io.grpc.MethodDescriptor;
+import org.apache.http.HttpHeaders;
+import org.onap.ccsdk.sli.adaptors.grpc.GrpcProperties;
+
+public class BasicAuthClientInterceptor implements ClientInterceptor {
+
+    private GrpcProperties props;
+
+    public BasicAuthClientInterceptor(GrpcProperties props) {
+        this.props = props;
+    }
+
+    @Override
+    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
+        MethodDescriptor<ReqT, RespT> method,
+        CallOptions callOptions,
+        Channel channel) {
+
+        Key<String> authHeader = Key.of(HttpHeaders.AUTHORIZATION, Metadata.ASCII_STRING_MARSHALLER);
+
+        return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
+            channel.newCall(method, callOptions)) {
+            @Override
+            public void start(Listener<RespT> responseListener, Metadata headers) {
+                headers.put(authHeader, props.getAuth());
+                super.start(responseListener, headers);
+            }
+        };
+    }
+}
index a5ccff8..f922f9e 100644 (file)
@@ -39,6 +39,7 @@ public class BlueprintProcessingClient implements GrpcClient {
             .forAddress(props.getUrl(), props.getPort())
             .nameResolverFactory(new DnsNameResolverProvider())
             .loadBalancerFactory(new PickFirstLoadBalancerProvider())
+            .intercept(new BasicAuthClientInterceptor(props))
             .usePlaintext()
             .build();
         this.handler = new BlueprintProcessingHandler();
index 650910e..7e1bf40 100644 (file)
@@ -15,3 +15,4 @@
 #
 org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.url=blueprint-processor
 org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.port=9111
+org.onap.ccsdk.sli.adaptors.grpc.blueprint.processor.auth=Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
index 25de0d7..8c0da51 100644 (file)
@@ -118,7 +118,7 @@ public class BlueprintProcessingClientTest {
         GrpcProperties props = Mockito.mock(GrpcProperties.class);
         doReturn(999).when(props).getPort();
         doReturn("localhost").when(props).getUrl();
-        new BlueprintProcessingClient(props);
+        new BlueprintProcessingClient(props).stop();
     }