This allows easier URL handling in code that uses APIEndpoint. If we continued to store the URL unparsed, it would require redundant parsing whenver we want to extract information from it. Also, parsing the URL earlier should give improve validation. Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com> Upstream-commit: 79db131a358f15d4bdef37e251daf27429d116b3 Component: engine
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package registry
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/reference"
|
|
"github.com/docker/go-connections/tlsconfig"
|
|
)
|
|
|
|
func (s *Service) lookupV1Endpoints(repoName reference.Named) (endpoints []APIEndpoint, err error) {
|
|
var cfg = tlsconfig.ServerDefault
|
|
tlsConfig := &cfg
|
|
nameString := repoName.FullName()
|
|
if strings.HasPrefix(nameString, DefaultNamespace+"/") {
|
|
endpoints = append(endpoints, APIEndpoint{
|
|
URL: DefaultV1Registry,
|
|
Version: APIVersion1,
|
|
Official: true,
|
|
TrimHostname: true,
|
|
TLSConfig: tlsConfig,
|
|
})
|
|
return endpoints, nil
|
|
}
|
|
|
|
slashIndex := strings.IndexRune(nameString, '/')
|
|
if slashIndex <= 0 {
|
|
return nil, fmt.Errorf("invalid repo name: missing '/': %s", nameString)
|
|
}
|
|
hostname := nameString[:slashIndex]
|
|
|
|
tlsConfig, err = s.TLSConfig(hostname)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
endpoints = []APIEndpoint{
|
|
{
|
|
URL: &url.URL{
|
|
Scheme: "https",
|
|
Host: hostname,
|
|
},
|
|
Version: APIVersion1,
|
|
TrimHostname: true,
|
|
TLSConfig: tlsConfig,
|
|
},
|
|
}
|
|
|
|
if tlsConfig.InsecureSkipVerify {
|
|
endpoints = append(endpoints, APIEndpoint{ // or this
|
|
URL: &url.URL{
|
|
Scheme: "http",
|
|
Host: hostname,
|
|
},
|
|
Version: APIVersion1,
|
|
TrimHostname: true,
|
|
// used to check if supposed to be secure via InsecureSkipVerify
|
|
TLSConfig: tlsConfig,
|
|
})
|
|
}
|
|
return endpoints, nil
|
|
}
|