Add supoort for DAPR_API_TOKEN

This commit is contained in:
pruthvidhodda 2020-08-25 14:50:48 -07:00
parent eede480403
commit c6055c0b96
4 changed files with 67 additions and 2 deletions

View File

@ -5,6 +5,7 @@
package io.dapr.client; package io.dapr.client;
import io.dapr.DaprClientGrpcInterceptor;
import io.dapr.serializer.DaprObjectSerializer; import io.dapr.serializer.DaprObjectSerializer;
import io.dapr.serializer.DefaultObjectSerializer; import io.dapr.serializer.DefaultObjectSerializer;
import io.dapr.utils.Constants; import io.dapr.utils.Constants;
@ -107,7 +108,10 @@ public class DaprClientBuilder {
if (port <= 0) { if (port <= 0) {
throw new IllegalStateException("Invalid port."); throw new IllegalStateException("Invalid port.");
} }
ManagedChannel channel = ManagedChannelBuilder.forAddress(Constants.DEFAULT_HOSTNAME, port).usePlaintext().build(); ManagedChannel channel = ManagedChannelBuilder.forAddress(Constants.DEFAULT_HOSTNAME, port)
.usePlaintext()
.intercept(new DaprClientGrpcInterceptor())
.build();
Closeable closeableChannel = () -> { Closeable closeableChannel = () -> {
if (channel != null && !channel.isShutdown()) { if (channel != null && !channel.isShutdown()) {
channel.shutdown(); channel.shutdown();

View File

@ -0,0 +1,44 @@
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
package io.dapr;
import io.dapr.utils.Constants;
import io.dapr.utils.Properties;
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;
/**
* A dapr grpc client call interceptor.
*/
public class DaprClientGrpcInterceptor implements ClientInterceptor {
/**
* {@inheritDoc}
*/
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT,
RespT> methodDescriptor,
CallOptions callOptions, Channel channel) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(channel.newCall(methodDescriptor,
callOptions)) {
@Override
public void start(final Listener<RespT> responseListener, final Metadata headers) {
String daprApiToken = Properties.getStringOrDefault(Constants.DAPR_API_TOKEN,
Constants.DAPR_API_TOKEN, null);
if (daprApiToken != null) {
headers.put(Key.of(Constants.DAPR_API_TOKEN_HEADER, Metadata.ASCII_STRING_MARSHALLER), daprApiToken);
}
super.start(responseListener, headers);
}
};
}
}

View File

@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import io.dapr.exceptions.DaprError; import io.dapr.exceptions.DaprError;
import io.dapr.exceptions.DaprException; import io.dapr.exceptions.DaprException;
import io.dapr.utils.Constants; import io.dapr.utils.Constants;
import io.dapr.utils.Properties;
import io.grpc.Context; import io.grpc.Context;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.context.propagation.HttpTextFormat; import io.opentelemetry.context.propagation.HttpTextFormat;
@ -258,6 +259,12 @@ public class DaprHttp implements Closeable {
} else { } else {
requestBuilder.method(method, body); requestBuilder.method(method, body);
} }
String daprApiToken = Properties.getStringOrDefault(Constants.DAPR_API_TOKEN, Constants.DAPR_API_TOKEN, null);
if (daprApiToken != null) {
requestBuilder.addHeader(Constants.DAPR_API_TOKEN_HEADER, daprApiToken);
}
if (headers != null) { if (headers != null) {
Optional.ofNullable(headers.entrySet()).orElse(Collections.emptySet()).stream() Optional.ofNullable(headers.entrySet()).orElse(Collections.emptySet()).stream()
.forEach(header -> { .forEach(header -> {
@ -308,4 +315,4 @@ public class DaprHttp implements Closeable {
return EMPTY_BYTES; return EMPTY_BYTES;
} }
} }

View File

@ -60,6 +60,16 @@ public final class Constants {
*/ */
public static final String ACTOR_TIMER_RELATIVE_URL_FORMAT = ACTORS_BASE_URL + "/%s/%s/timers/%s"; public static final String ACTOR_TIMER_RELATIVE_URL_FORMAT = ACTORS_BASE_URL + "/%s/%s/timers/%s";
/**
* Environment variable name for dapr api token.
*/
public static final String DAPR_API_TOKEN = "DAPR_API_TOKEN";
/**
* Header name for the dapr api token environment variable name.
*/
public static final String DAPR_API_TOKEN_HEADER = "dapr-api-token";
/** /**
* Base path to invoke methods. * Base path to invoke methods.
*/ */