mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2025-12-23 06:15:47 +00:00
55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
// Copyright 2021-2024 the Pinniped contributors. All Rights Reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package kubeclient
|
|
|
|
import (
|
|
restclient "k8s.io/client-go/rest"
|
|
"k8s.io/client-go/transport"
|
|
|
|
"go.pinniped.dev/internal/crypto/ptls"
|
|
)
|
|
|
|
type Option func(*clientConfig)
|
|
|
|
type clientConfig struct {
|
|
config *restclient.Config
|
|
tlsConfigFunc ptls.ConfigFunc
|
|
middlewares []Middleware
|
|
transportWrapper transport.WrapperFunc
|
|
}
|
|
|
|
func WithConfig(config *restclient.Config) Option {
|
|
return func(c *clientConfig) {
|
|
c.config = config
|
|
}
|
|
}
|
|
|
|
// WithTLSConfigFunc will cause the client to use the provided configuration from the ptls package when the
|
|
// client makes requests. For example, pass ptls.Default or ptls.Secure as the argument. When this Option
|
|
// is not used, the client will default to using ptls.Secure.
|
|
func WithTLSConfigFunc(tlsConfigFunc ptls.ConfigFunc) Option {
|
|
return func(c *clientConfig) {
|
|
c.tlsConfigFunc = tlsConfigFunc
|
|
}
|
|
}
|
|
|
|
func WithMiddleware(middleware Middleware) Option {
|
|
return func(c *clientConfig) {
|
|
if middleware == nil {
|
|
return // support passing in a nil middleware as a no-op
|
|
}
|
|
|
|
c.middlewares = append(c.middlewares, middleware)
|
|
}
|
|
}
|
|
|
|
// WithTransportWrapper will wrap the client-go http.RoundTripper chain *after* the middleware
|
|
// wrapper is applied. I.e., this wrapper has the opportunity to supply an http.RoundTripper that
|
|
// runs first in the client-go http.RoundTripper chain.
|
|
func WithTransportWrapper(wrapper transport.WrapperFunc) Option {
|
|
return func(c *clientConfig) {
|
|
c.transportWrapper = wrapper
|
|
}
|
|
}
|