forked from TrueCloudLab/distribution
462bb55c3f
If a user specifies `mydomain.com:443` in the `Host` configuration, the PATCH request for the layer upload will fail because the challenge does not appear to be in the map. To fix this, we normalize the map keys to always use the Host:Port combination. Closes https://github.com/docker/docker/issues/18469 Signed-off-by: Stan Hu <stanhu@gmail.com>
27 lines
699 B
Go
27 lines
699 B
Go
package auth
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// FROM: http://golang.org/src/net/http/client.go
|
|
// Given a string of the form "host", "host:port", or "[ipv6::address]:port",
|
|
// return true if the string includes a port.
|
|
func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") }
|
|
|
|
// FROM: http://golang.org/src/net/http/transport.go
|
|
var portMap = map[string]string{
|
|
"http": "80",
|
|
"https": "443",
|
|
}
|
|
|
|
// CanonicalAddr returns url.Host but always with a ":port" suffix
|
|
// FROM: http://golang.org/src/net/http/transport.go
|
|
func CanonicalAddr(url *url.URL) string {
|
|
addr := url.Host
|
|
if !hasPort(addr) {
|
|
return addr + ":" + portMap[url.Scheme]
|
|
}
|
|
return addr
|
|
}
|