@ -18,12 +18,14 @@ package registry // import "helm.sh/helm/v3/internal/experimental/registry"
import (
import (
"context"
"context"
"crypto/tls"
"fmt"
"fmt"
"io"
"io"
"io/ioutil"
"io/ioutil"
"net/http"
"net/http"
"sort"
"sort"
"github.com/containerd/containerd/remotes"
auth "github.com/deislabs/oras/pkg/auth/docker"
auth "github.com/deislabs/oras/pkg/auth/docker"
"github.com/deislabs/oras/pkg/oras"
"github.com/deislabs/oras/pkg/oras"
"github.com/gosuri/uitable"
"github.com/gosuri/uitable"
@ -74,7 +76,7 @@ func NewClient(opts ...ClientOption) (*Client, error) {
}
}
}
}
if client . resolver == nil {
if client . resolver == nil {
resolver , err := client . authorizer . Resolver ( context . Background ( ) , http . DefaultClient , false )
resolver , err := client . newResolver ( false , false )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
@ -117,7 +119,17 @@ func (c *Client) Logout(hostname string) error {
}
}
// PushChart uploads a chart to a registry
// PushChart uploads a chart to a registry
func ( c * Client ) PushChart ( ref * Reference ) error {
func ( c * Client ) PushChart ( ref * Reference , insecure bool , plainHTTP bool ) error {
if insecure || plainHTTP {
resolver , err := c . newResolver ( insecure , plainHTTP )
if err != nil {
return err
}
c . resolver = & Resolver {
Resolver : resolver ,
}
}
r , err := c . cache . FetchReference ( ref )
r , err := c . cache . FetchReference ( ref )
if err != nil {
if err != nil {
return err
return err
@ -144,7 +156,17 @@ func (c *Client) PushChart(ref *Reference) error {
}
}
// PullChart downloads a chart from a registry
// PullChart downloads a chart from a registry
func ( c * Client ) PullChart ( ref * Reference ) error {
func ( c * Client ) PullChart ( ref * Reference , insecure bool , plainHTTP bool ) error {
if insecure || plainHTTP {
resolver , err := c . newResolver ( insecure , plainHTTP )
if err != nil {
return err
}
c . resolver = & Resolver {
Resolver : resolver ,
}
}
if ref . Tag == "" {
if ref . Tag == "" {
return errors . New ( "tag explicitly required" )
return errors . New ( "tag explicitly required" )
}
}
@ -279,3 +301,17 @@ func (c *Client) getChartTableRows() ([][]interface{}, error) {
}
}
return rows , nil
return rows , nil
}
}
func ( c * Client ) newResolver ( insecure bool , plainHTTP bool ) ( resolver remotes . Resolver , err error ) {
client := http . DefaultClient
if insecure {
client . Transport = & http . Transport {
TLSClientConfig : & tls . Config {
InsecureSkipVerify : true ,
} ,
}
}
resolver , err = c . authorizer . Resolver ( context . Background ( ) , client , plainHTTP )
return
}