@ -21,6 +21,7 @@ import (
"fmt"
"fmt"
"io"
"io"
"log"
"log"
"net/http"
"os"
"os"
"strings"
"strings"
@ -29,6 +30,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/clientcmd"
"helm.sh/helm/v3/internal/tlsutil"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/registry"
"helm.sh/helm/v3/pkg/registry"
"helm.sh/helm/v3/pkg/repo"
"helm.sh/helm/v3/pkg/repo"
@ -153,7 +155,7 @@ func newRootCmd(actionConfig *action.Configuration, out io.Writer, args []string
flags . ParseErrorsWhitelist . UnknownFlags = true
flags . ParseErrorsWhitelist . UnknownFlags = true
flags . Parse ( args )
flags . Parse ( args )
registryClient , err := newDefaultRegistryClient ( false )
registryClient , err := newDefaultRegistryClient ( false , "" , "" )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
@ -258,27 +260,30 @@ func checkForExpiredRepos(repofile string) {
}
}
func newRegistryClient ( certFile , keyFile , caFile string , insecureSkipTLSverify , plainHTTP bool ) ( * registry . Client , error ) {
func newRegistryClient (
certFile , keyFile , caFile string , insecureSkipTLSverify , plainHTTP bool , username , password string ,
) ( * registry . Client , error ) {
if certFile != "" && keyFile != "" || caFile != "" || insecureSkipTLSverify {
if certFile != "" && keyFile != "" || caFile != "" || insecureSkipTLSverify {
registryClient , err := newRegistryClientWithTLS ( certFile , keyFile , caFile , insecureSkipTLSverify )
registryClient , err := newRegistryClientWithTLS ( certFile , keyFile , caFile , insecureSkipTLSverify , username , password )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
return registryClient , nil
return registryClient , nil
}
}
registryClient , err := newDefaultRegistryClient ( plainHTTP )
registryClient , err := newDefaultRegistryClient ( plainHTTP , username , password )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
return registryClient , nil
return registryClient , nil
}
}
func newDefaultRegistryClient ( plainHTTP bool ) ( * registry . Client , error ) {
func newDefaultRegistryClient ( plainHTTP bool , username , password string ) ( * registry . Client , error ) {
opts := [ ] registry . ClientOption {
opts := [ ] registry . ClientOption {
registry . ClientOptDebug ( settings . Debug ) ,
registry . ClientOptDebug ( settings . Debug ) ,
registry . ClientOptEnableCache ( true ) ,
registry . ClientOptEnableCache ( true ) ,
registry . ClientOptWriter ( os . Stderr ) ,
registry . ClientOptWriter ( os . Stderr ) ,
registry . ClientOptCredentialsFile ( settings . RegistryConfig ) ,
registry . ClientOptCredentialsFile ( settings . RegistryConfig ) ,
registry . ClientOptBasicAuth ( username , password ) ,
}
}
if plainHTTP {
if plainHTTP {
opts = append ( opts , registry . ClientOptPlainHTTP ( ) )
opts = append ( opts , registry . ClientOptPlainHTTP ( ) )
@ -292,10 +297,26 @@ func newDefaultRegistryClient(plainHTTP bool) (*registry.Client, error) {
return registryClient , nil
return registryClient , nil
}
}
func newRegistryClientWithTLS ( certFile , keyFile , caFile string , insecureSkipTLSverify bool ) ( * registry . Client , error ) {
func newRegistryClientWithTLS (
certFile , keyFile , caFile string , insecureSkipTLSverify bool , username , password string ,
) ( * registry . Client , error ) {
tlsConf , err := tlsutil . NewClientTLS ( certFile , keyFile , caFile , insecureSkipTLSverify )
if err != nil {
return nil , fmt . Errorf ( "can't create TLS config for client: %w" , err )
}
// Create a new registry client
// Create a new registry client
registryClient , err := registry . NewRegistryClientWithTLS ( os . Stderr , certFile , keyFile , caFile , insecureSkipTLSverify ,
registryClient , err := registry . NewClient (
settings . RegistryConfig , settings . Debug ,
registry . ClientOptDebug ( settings . Debug ) ,
registry . ClientOptEnableCache ( true ) ,
registry . ClientOptWriter ( os . Stderr ) ,
registry . ClientOptCredentialsFile ( settings . RegistryConfig ) ,
registry . ClientOptHTTPClient ( & http . Client {
Transport : & http . Transport {
TLSClientConfig : tlsConf ,
} ,
} ) ,
registry . ClientOptBasicAuth ( username , password ) ,
)
)
if err != nil {
if err != nil {
return nil , err
return nil , err