Skip to content

Commit 06f1193

Browse files
committed
add nop info lookup token
1 parent 6efadaa commit 06f1193

3 files changed

Lines changed: 45 additions & 9 deletions

File tree

pkg/chipingress/auth.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ type HeaderProvider interface {
1414
Headers(ctx context.Context) (map[string]string, error)
1515
}
1616

17+
type HeaderProviderFunc func(ctx context.Context) (map[string]string, error)
18+
19+
func (f HeaderProviderFunc) Headers(ctx context.Context) (map[string]string, error) {
20+
return f(ctx)
21+
}
22+
1723
// Basic-Auth authentication for Chip Ingress
1824
type basicAuthCredentials struct {
1925
authHeader map[string]string

pkg/chipingress/client.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ type Opt func(*clientConfig)
4444

4545
// clientConfig is the configuration for the ChipIngressClient.
4646
type clientConfig struct {
47-
transportCredentials credentials.TransportCredentials
48-
perRPCCredentials credentials.PerRPCCredentials
49-
headerProvider HeaderProvider
50-
insecureConnection bool
51-
host string
52-
meterProvider metric.MeterProvider
53-
tracerProvider trace.TracerProvider
47+
transportCredentials credentials.TransportCredentials
48+
perRPCCredentials credentials.PerRPCCredentials
49+
headerProvider HeaderProvider
50+
insecureConnection bool
51+
host string
52+
meterProvider metric.MeterProvider
53+
tracerProvider trace.TracerProvider
54+
nopInfoHeaderProvider HeaderProvider
5455
}
5556

5657
func newClientConfig(host string) *clientConfig {
@@ -59,8 +60,9 @@ func newClientConfig(host string) *clientConfig {
5960
perRPCCredentials: nil,
6061
host: host,
6162
// Default to insecure connection
62-
insecureConnection: true,
63-
transportCredentials: insecure.NewCredentials(),
63+
insecureConnection: true,
64+
transportCredentials: insecure.NewCredentials(),
65+
nopInfoHeaderProvider: nil,
6466
}
6567
return cfg
6668
}
@@ -116,6 +118,10 @@ func NewClient(address string, opts ...Opt) (Client, error) {
116118
// NOTE: not supporting streaming interceptors
117119
}
118120

121+
if cfg.nopInfoHeaderProvider != nil {
122+
grpcOpts = append(grpcOpts, grpc.WithUnaryInterceptor(newHeaderInterceptor(cfg.nopInfoHeaderProvider)))
123+
}
124+
119125
conn, err := grpc.NewClient(address, grpcOpts...)
120126
if err != nil {
121127
return nil, err
@@ -226,6 +232,16 @@ func WithTracerProvider(provider trace.TracerProvider) Opt {
226232
return func(c *clientConfig) { c.tracerProvider = provider }
227233
}
228234

235+
func WithNOPLookup() Opt {
236+
return func(c *clientConfig) {
237+
c.nopInfoHeaderProvider = HeaderProviderFunc(func(ctx context.Context) (map[string]string, error) {
238+
return map[string]string{
239+
"x-include-nop-info": "true",
240+
}, nil
241+
})
242+
}
243+
}
244+
229245
// newHeaderInterceptor creates a unary interceptor that adds headers from a HeaderProvider
230246
func newHeaderInterceptor(provider HeaderProvider) grpc.UnaryClientInterceptor {
231247
return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {

pkg/chipingress/client_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,20 @@ func TestOptions(t *testing.T) {
568568
WithTokenAuth(mockProvider)(&config)
569569
assert.NotNil(t, config.perRPCCredentials)
570570
})
571+
572+
t.Run("WithNopLookup", func(t *testing.T) {
573+
mockProvider := &mockHeaderProvider{
574+
headers: map[string]string{"x-include-nop-info": "true"},
575+
}
576+
config := defaultCfg
577+
WithNOPLookup()(&config)
578+
assert.NotNil(t, config.nopInfoHeaderProvider)
579+
580+
headers, err := config.nopInfoHeaderProvider.Headers(t.Context())
581+
assert.NoError(t, err)
582+
assert.Equal(t, mockProvider.headers, headers)
583+
584+
})
571585
}
572586

573587
func TestHeaderInterceptor(t *testing.T) {

0 commit comments

Comments
 (0)