package registryurl import ( "errors" "net/url" "strings" ) // Parse parses and validates a given serverURL to an url.URL, and // returns an error if validation failed. Querystring parameters are // omitted in the resulting URL, because they are not used in the helper. // // If serverURL does not have a valid scheme, `//` is used as scheme // before parsing. This prevents the hostname being used as path, // and the credentials being stored without host. func Parse(registryURL string) (*url.URL, error) { // Check if registryURL has a scheme, otherwise add `//` as scheme. if !strings.Contains(registryURL, "://") && !strings.HasPrefix(registryURL, "//") { registryURL = "//" + registryURL } u, err := url.Parse(registryURL) if err != nil { return nil, err } if u.Scheme != "" && u.Scheme != "https" && u.Scheme != "http" { return nil, errors.New("unsupported scheme: " + u.Scheme) } if u.Hostname() == "" { return nil, errors.New("no hostname in URL") } u.RawQuery = "" return u, nil } // GetHostname returns the hostname of the URL // // Deprecated: use url.Hostname() func GetHostname(u *url.URL) string { return u.Hostname() } // GetPort returns the port number of the URL // // Deprecated: use url.Port() func GetPort(u *url.URL) string { return u.Port() }