From eea4ffa4c39ffc29548ec623f029ae3ef9e47ad7 Mon Sep 17 00:00:00 2001 From: Hugo Santos Date: Tue, 10 Sep 2024 16:52:54 +0200 Subject: [PATCH] servercore: introduced SharedMtlsGrpcListenerConfiguration that allows creating separate listeners that share the same mtls configuration. --- std/go/grpc/servercore/configurations.go | 10 ++++++++++ std/go/grpc/servercore/listener.go | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/std/go/grpc/servercore/configurations.go b/std/go/grpc/servercore/configurations.go index 304ccd6275..a18a6bab14 100644 --- a/std/go/grpc/servercore/configurations.go +++ b/std/go/grpc/servercore/configurations.go @@ -16,6 +16,7 @@ import ( var configConfigs = map[string]ListenerConfiguration{} type DefaultConfiguration struct{} +type DefaultConfigurationWithSharedMtls struct{} type ListenerConfiguration interface { CreateListener(context.Context, string, ListenOpts) (net.Listener, error) @@ -27,6 +28,13 @@ type GrpcListenerConfiguration interface { ServerOpts(string) []grpc.ServerOption } +type SharedMtlsGrpcListenerConfiguration interface { + ListenerConfiguration + + UseFoundationMTLSConfiguration() + ServerOpts(string) []grpc.ServerOption +} + func SetListenerConfiguration(name string, conf ListenerConfiguration) { core.AssertNotRunning("SetServiceConfiguration") @@ -48,3 +56,5 @@ func listenerConfiguration(name string) ListenerConfiguration { func (DefaultConfiguration) CreateListener(ctx context.Context, name string, opts ListenOpts) (net.Listener, error) { return opts.CreateNamedListener(ctx, name) } + +func (DefaultConfigurationWithSharedMtls) UseFoundationMTLSConfiguration() {} diff --git a/std/go/grpc/servercore/listener.go b/std/go/grpc/servercore/listener.go index ca4c3340e5..52d3365e0a 100644 --- a/std/go/grpc/servercore/listener.go +++ b/std/go/grpc/servercore/listener.go @@ -157,6 +157,13 @@ func Listen(ctx context.Context, opts ListenOpts, registerServices func(Server)) x = append(x, grpc.Creds(creds)) } + serversByConfiguration[cfg.Name] = append(serversByConfiguration[cfg.Name], grpc.NewServer(x...)) + } else if cgrp, ok := c.(SharedMtlsGrpcListenerConfiguration); ok { + x := append(slices.Clone(grpcopts), cgrp.ServerOpts(cfg.Name)...) + if tlsConfig != nil { + x = append(x, grpc.Creds(credentials.NewTLS(tlsConfig))) + } + serversByConfiguration[cfg.Name] = append(serversByConfiguration[cfg.Name], grpc.NewServer(x...)) } else { return fnerrors.New("listener configuration for %q does not support grpc", cfg.Name)