Skip to content

Commit

Permalink
xds: rename SecretProvider to SslContextProvider and make it non-gene…
Browse files Browse the repository at this point in the history
…ric (#6349)
  • Loading branch information
sanjaypujare committed Oct 29, 2019
1 parent da1231a commit d045292
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 83 deletions.
Expand Up @@ -45,18 +45,18 @@
* An SslContext provider that uses file-based secrets (secret volume). Used for both server and
* client SslContexts
*/
final class SslContextSecretVolumeSecretProvider implements SecretProvider<SslContext> {
final class SecretVolumeSslContextProvider implements SslContextProvider {

private static final Logger logger =
Logger.getLogger(SslContextSecretVolumeSecretProvider.class.getName());
Logger.getLogger(SecretVolumeSslContextProvider.class.getName());

private final boolean server;
@Nullable private final String privateKey;
@Nullable private final String privateKeyPassword;
@Nullable private final String certificateChain;
@Nullable private final CertificateValidationContext certContext;

private SslContextSecretVolumeSecretProvider(
private SecretVolumeSslContextProvider(
@Nullable String privateKey,
@Nullable String privateKeyPassword,
@Nullable String certificateChain,
Expand Down Expand Up @@ -106,7 +106,7 @@ static TlsCertificate validateTlsCertificate(
return tlsCertificate;
}

static SslContextSecretVolumeSecretProvider getProviderForServer(
static SecretVolumeSslContextProvider getProviderForServer(
DownstreamTlsContext downstreamTlsContext) {
checkNotNull(downstreamTlsContext, "downstreamTlsContext");
CommonTlsContext commonTlsContext = downstreamTlsContext.getCommonTlsContext();
Expand All @@ -125,15 +125,15 @@ static SslContextSecretVolumeSecretProvider getProviderForServer(
}
String privateKeyPassword =
tlsCertificate.hasPassword() ? tlsCertificate.getPassword().getInlineString() : null;
return new SslContextSecretVolumeSecretProvider(
return new SecretVolumeSslContextProvider(
tlsCertificate.getPrivateKey().getFilename(),
privateKeyPassword,
tlsCertificate.getCertificateChain().getFilename(),
certificateValidationContext,
/* server= */ true);
}

static SslContextSecretVolumeSecretProvider getProviderForClient(
static SecretVolumeSslContextProvider getProviderForClient(
UpstreamTlsContext upstreamTlsContext) {
checkNotNull(upstreamTlsContext, "upstreamTlsContext");
CommonTlsContext commonTlsContext = upstreamTlsContext.getCommonTlsContext();
Expand All @@ -159,7 +159,7 @@ static SslContextSecretVolumeSecretProvider getProviderForClient(
}
certificateChain = tlsCertificate.getCertificateChain().getFilename();
}
return new SslContextSecretVolumeSecretProvider(
return new SecretVolumeSslContextProvider(
privateKey,
privateKeyPassword,
certificateChain,
Expand All @@ -181,7 +181,7 @@ private static CertificateValidationContext getCertificateValidationContext(
}

@Override
public void addCallback(final Callback<SslContext> callback, Executor executor) {
public void addCallback(final Callback callback, Executor executor) {
checkNotNull(callback, "callback");
checkNotNull(executor, "executor");
executor.execute(
Expand Down
Expand Up @@ -17,28 +17,30 @@
package io.grpc.xds.sds;

import io.grpc.Internal;
import io.netty.handler.ssl.SslContext;

import java.util.concurrent.Executor;

/**
* A SecretProvider is a "container" or provider of a secret. This is used by gRPC-xds to access
* secrets, so is not part of the public API of gRPC. This "container" may represent a stream that
* is receiving the requested secret(s) or it could represent file-system based secret(s) that are
* dynamic.
* A SslContextProvider is a "container" or provider of SslContext. This is used by gRPC-xds to
* obtain an SslContext, so is not part of the public API of gRPC. This "container" may represent
* a stream that is receiving the requested secret(s) or it could represent file-system based
* secret(s) that are dynamic.
*/
@Internal
public interface SecretProvider<T> {
public interface SslContextProvider {

interface Callback<T> {
/** Informs callee of new/updated secret. */
void updateSecret(T secret);
interface Callback {
/** Informs callee of new/updated SslContext. */
void updateSecret(SslContext sslContext);

/** Informs callee of an exception that was generated. */
void onException(Throwable throwable);
}

/**
* Registers a callback on the given executor. The callback will run when secret becomes available
* or immediately if the result is already available.
* Registers a callback on the given executor. The callback will run when SslContext becomes
* available or immediately if the result is already available.
*/
void addCallback(Callback<T> callback, Executor executor);
void addCallback(Callback callback, Executor executor);
}
15 changes: 7 additions & 8 deletions xds/src/main/java/io/grpc/xds/sds/TlsContextManager.java
Expand Up @@ -19,13 +19,12 @@
import io.envoyproxy.envoy.api.v2.auth.DownstreamTlsContext;
import io.envoyproxy.envoy.api.v2.auth.UpstreamTlsContext;
import io.grpc.Internal;
import io.netty.handler.ssl.SslContext;

/**
* Class to manage secrets used to create SSL contexts - this effectively manages SSL contexts
* (aka TlsContexts) based on inputs we get from xDS. This is used by gRPC-xds to access the
* SSL contexts/secrets and is not public API.
* Currently it just creates a new SecretProvider for each call.
* Currently it just creates a new SslContextProvider for each call.
*/
// TODO(sanjaypujare): implement a Map and ref-counting
@Internal
Expand All @@ -43,15 +42,15 @@ public static synchronized TlsContextManager getInstance() {
return instance;
}

/** Creates a SecretProvider. Used for retrieving a server-side SslContext. */
public SecretProvider<SslContext> findOrCreateServerSslContextProvider(
/** Creates a SslContextProvider. Used for retrieving a server-side SslContext. */
public SslContextProvider findOrCreateServerSslContextProvider(
DownstreamTlsContext downstreamTlsContext) {
return SslContextSecretVolumeSecretProvider.getProviderForServer(downstreamTlsContext);
return SecretVolumeSslContextProvider.getProviderForServer(downstreamTlsContext);
}

/** Creates a SecretProvider. Used for retrieving a client-side SslContext. */
public SecretProvider<SslContext> findOrCreateClientSslContextProvider(
/** Creates a SslContextProvider. Used for retrieving a client-side SslContext. */
public SslContextProvider findOrCreateClientSslContextProvider(
UpstreamTlsContext upstreamTlsContext) {
return SslContextSecretVolumeSecretProvider.getProviderForClient(upstreamTlsContext);
return SecretVolumeSslContextProvider.getProviderForClient(upstreamTlsContext);
}
}
Expand Up @@ -29,7 +29,7 @@
import io.grpc.netty.InternalProtocolNegotiator.ProtocolNegotiator;
import io.grpc.netty.InternalProtocolNegotiators;
import io.grpc.netty.NettyChannelBuilder;
import io.grpc.xds.sds.SecretProvider;
import io.grpc.xds.sds.SslContextProvider;
import io.grpc.xds.sds.TlsContextManager;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerAdapter;
Expand Down Expand Up @@ -192,11 +192,11 @@ protected void handlerAdded0(final ChannelHandlerContext ctx) {
final BufferReadsHandler bufferReads = new BufferReadsHandler();
ctx.pipeline().addBefore(ctx.name(), null, bufferReads);

SecretProvider<SslContext> sslContextProvider =
SslContextProvider sslContextProvider =
TlsContextManager.getInstance().findOrCreateClientSslContextProvider(upstreamTlsContext);

sslContextProvider.addCallback(
new SecretProvider.Callback<SslContext>() {
new SslContextProvider.Callback() {

@Override
public void updateSecret(SslContext sslContext) {
Expand Down Expand Up @@ -277,12 +277,12 @@ protected void handlerAdded0(final ChannelHandlerContext ctx) {
final BufferReadsHandler bufferReads = new BufferReadsHandler();
ctx.pipeline().addBefore(ctx.name(), null, bufferReads);

SecretProvider<SslContext> sslContextProvider =
SslContextProvider sslContextProvider =
TlsContextManager.getInstance()
.findOrCreateServerSslContextProvider(downstreamTlsContext);

sslContextProvider.addCallback(
new SecretProvider.Callback<SslContext>() {
new SslContextProvider.Callback() {

@Override
public void updateSecret(SslContext sslContext) {
Expand Down

0 comments on commit d045292

Please sign in to comment.