-
Notifications
You must be signed in to change notification settings - Fork 23
wip: refreshable *tls.Config support for CGR clients #725
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
Generate changelog in
|
conjure-go-client/httpclient/internal/refreshingclient/tlsconfig.go
Outdated
Show resolved
Hide resolved
conjure-go-client/httpclient/internal/refreshingclient/tlsconfig.go
Outdated
Show resolved
Hide resolved
how i'm imagining that this would be used: // example implementation of CA bundle refreshable
type configMapCABundleProvider struct {
refreshable.Updatable[[]*x509.Certificate]
}
// AddOrUpdate plugs into an informer events to parse configmaps to CA certs
func (c *configMapCABundleProvider) AddOrUpdate(ctx context.Context, cm *corev1.ConfigMap) error {
// some parsing implementation
certs, err := parseCM(cm)
if err != nil {
return err
}
// should be fine since the *x509.Certificate type doesn't contain any function types.
// if it does, we can store the raw cert bytes instead
c.Updatable.Update(certs)
return nil
}
func NewRefreshableTLSConfig(
ctx context.Context,
certProvider certificateprovider.CertProviderFn,
caBundleProvider refreshable.Refreshable[[]*x509.Certificate],
) (refreshable.Refreshable[*tls.Config], refreshable.UnsubscribeFunc, error) {
return refreshable.MapWithError(
caBundleProvider,
func(cas []*x509.Certificate) (*tls.Config, error) {
return tlsconfig.NewClientConfig(
tlsconfig.ClientKeyPair(func() (tls.Certificate, error) {
return certProvider.GetClientCert(ctx)
}),
tlsconfig.ClientRootCAs(func() (*x509.CertPool, error) {
cp, err := x509.SystemCertPool()
if err != nil {
return nil, err
}
for _, cert := range cas {
cp.AddCert(cert)
}
return cp, nil
}),
)
},
)
} and you could pass the |
} | ||
|
||
// SubscribeToTLSConfig implements RefreshableTLSConf. | ||
func (m *MappedRefreshableTLSConfig) SubscribeToTLSConfig(consumer func(*tls.Config)) (unsubscribe func()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are we reimplementing refreshables here?
Before this PR
After this PR
==COMMIT_MSG==
==COMMIT_MSG==
Possible downsides?