|
@@ -50,10 +50,12 @@ func NewEndpoint(index *registrytypes.IndexInfo, userAgent string, metaHeaders h
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- endpoint, err := newEndpoint(GetAuthConfigKey(index), tlsConfig, userAgent, metaHeaders)
|
|
|
+
|
|
|
+ endpoint, err := newEndpointFromStr(GetAuthConfigKey(index), tlsConfig, userAgent, metaHeaders)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
+
|
|
|
if v != APIVersionUnknown {
|
|
|
endpoint.Version = v
|
|
|
}
|
|
@@ -91,28 +93,39 @@ func validateEndpoint(endpoint *Endpoint) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func newEndpoint(address string, tlsConfig *tls.Config, userAgent string, metaHeaders http.Header) (*Endpoint, error) {
|
|
|
- var (
|
|
|
- endpoint = new(Endpoint)
|
|
|
- trimmedAddress string
|
|
|
- err error
|
|
|
- )
|
|
|
+func newEndpoint(address url.URL, tlsConfig *tls.Config, userAgent string, metaHeaders http.Header) (*Endpoint, error) {
|
|
|
+ endpoint := &Endpoint{
|
|
|
+ IsSecure: (tlsConfig == nil || !tlsConfig.InsecureSkipVerify),
|
|
|
+ URL: new(url.URL),
|
|
|
+ Version: APIVersionUnknown,
|
|
|
+ }
|
|
|
|
|
|
- if !strings.HasPrefix(address, "http") {
|
|
|
+ *endpoint.URL = address
|
|
|
+
|
|
|
+ // TODO(tiborvass): make sure a ConnectTimeout transport is used
|
|
|
+ tr := NewTransport(tlsConfig)
|
|
|
+ endpoint.client = HTTPClient(transport.NewTransport(tr, DockerHeaders(userAgent, metaHeaders)...))
|
|
|
+ return endpoint, nil
|
|
|
+}
|
|
|
+
|
|
|
+func newEndpointFromStr(address string, tlsConfig *tls.Config, userAgent string, metaHeaders http.Header) (*Endpoint, error) {
|
|
|
+ if !strings.HasPrefix(address, "http://") && !strings.HasPrefix(address, "https://") {
|
|
|
address = "https://" + address
|
|
|
}
|
|
|
|
|
|
- endpoint.IsSecure = (tlsConfig == nil || !tlsConfig.InsecureSkipVerify)
|
|
|
+ trimmedAddress, detectedVersion := scanForAPIVersion(address)
|
|
|
|
|
|
- trimmedAddress, endpoint.Version = scanForAPIVersion(address)
|
|
|
+ uri, err := url.Parse(trimmedAddress)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- if endpoint.URL, err = url.Parse(trimmedAddress); err != nil {
|
|
|
+ endpoint, err := newEndpoint(*uri, tlsConfig, userAgent, metaHeaders)
|
|
|
+ if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- // TODO(tiborvass): make sure a ConnectTimeout transport is used
|
|
|
- tr := NewTransport(tlsConfig)
|
|
|
- endpoint.client = HTTPClient(transport.NewTransport(tr, DockerHeaders(userAgent, metaHeaders)...))
|
|
|
+ endpoint.Version = detectedVersion
|
|
|
return endpoint, nil
|
|
|
}
|
|
|
|