From 3b9c5726c09f2f920f0ef3043945d05a79258ce9 Mon Sep 17 00:00:00 2001 From: Chad Retz Date: Mon, 11 Mar 2024 16:20:33 -0500 Subject: [PATCH] Override API key with user metadata (#1419) --- internal/client.go | 9 +++------ internal/grpc_dialer_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/internal/client.go b/internal/client.go index b7a207cb8..e1e0d1ba4 100644 --- a/internal/client.go +++ b/internal/client.go @@ -967,13 +967,10 @@ func (a apiKeyCredentials) gRPCIntercept( if apiKey, err := a(ctx); err != nil { return err } else if apiKey != "" { - // Do from-add-new instead of append to overwrite anything there - md, _ := metadata.FromOutgoingContext(ctx) - if md == nil { - md = metadata.MD{} + // Only add API key if it doesn't already exist + if md, _ := metadata.FromOutgoingContext(ctx); len(md.Get("authorization")) == 0 { + ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+apiKey) } - md["authorization"] = []string{"Bearer " + apiKey} - ctx = metadata.NewOutgoingContext(ctx, md) } return invoker(ctx, method, req, reply, cc, opts...) } diff --git a/internal/grpc_dialer_test.go b/internal/grpc_dialer_test.go index 557a7ea28..3779f29bd 100644 --- a/internal/grpc_dialer_test.go +++ b/internal/grpc_dialer_test.go @@ -457,6 +457,18 @@ func TestCredentialsAPIKey(t *testing.T) { metadata.ValueFromIncomingContext(srv.getSystemInfoRequestContext, "Authorization"), ) + // Overwrite via context + _, err = client.WorkflowService().GetSystemInfo( + metadata.AppendToOutgoingContext(context.Background(), "authorization", "overridden value"), + &workflowservice.GetSystemInfoRequest{}, + ) + require.NoError(t, err) + require.Equal( + t, + []string{"overridden value"}, + metadata.ValueFromIncomingContext(srv.getSystemInfoRequestContext, "Authorization"), + ) + // Callback client, err = DialClient(ClientOptions{ HostPort: srv.addr,