format in the user agent header should follow RFC 2616
This commit is contained in:
parent
e9e0d3c1c5
commit
14155d6031
1 changed files with 40 additions and 19 deletions
|
@ -116,23 +116,9 @@ func (r *Registry) setUserAgent(req *http.Request, extra ...VersionChecker) {
|
||||||
if len(r.baseVersions)+len(extra) == 0 {
|
if len(r.baseVersions)+len(extra) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
userAgent := make(map[string]string, len(r.baseVersions)+len(extra))
|
|
||||||
|
|
||||||
for _, v := range r.baseVersions {
|
userAgent := appendVersions(r.baseVersionsStr, extra...)
|
||||||
if v == nil {
|
req.Header.Set("User-Agent", userAgent)
|
||||||
continue
|
|
||||||
}
|
|
||||||
userAgent[v.Name()] = v.Version()
|
|
||||||
}
|
|
||||||
for _, v := range extra {
|
|
||||||
if v == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
userAgent[v.Name()] = v.Version()
|
|
||||||
}
|
|
||||||
|
|
||||||
header, _ := json.Marshal(userAgent)
|
|
||||||
req.Header.Set("User-Agent", string(header))
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,9 +563,43 @@ type ImgData struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Registry struct {
|
type Registry struct {
|
||||||
client *http.Client
|
client *http.Client
|
||||||
authConfig *auth.AuthConfig
|
authConfig *auth.AuthConfig
|
||||||
baseVersions []VersionChecker
|
baseVersions []VersionChecker
|
||||||
|
baseVersionsStr string
|
||||||
|
}
|
||||||
|
|
||||||
|
func validVersion(version VersionChecker) bool {
|
||||||
|
stopChars := " \t\r\n/"
|
||||||
|
if strings.ContainsAny(version.Name(), stopChars) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if strings.ContainsAny(version.Version(), stopChars) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func appendVersions(base string, versions ...VersionChecker) string {
|
||||||
|
if len(versions) == 0 {
|
||||||
|
return base
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
if len(base) > 0 {
|
||||||
|
buf.Write([]byte(base))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range versions {
|
||||||
|
if !validVersion(v) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
buf.Write([]byte(v.Name()))
|
||||||
|
buf.Write([]byte("/"))
|
||||||
|
buf.Write([]byte(v.Version()))
|
||||||
|
buf.Write([]byte(" "))
|
||||||
|
}
|
||||||
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRegistry(root string, authConfig *auth.AuthConfig, baseVersions ...VersionChecker) (r *Registry, err error) {
|
func NewRegistry(root string, authConfig *auth.AuthConfig, baseVersions ...VersionChecker) (r *Registry, err error) {
|
||||||
|
@ -599,5 +619,6 @@ func NewRegistry(root string, authConfig *auth.AuthConfig, baseVersions ...Versi
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
r.baseVersions = baseVersions
|
r.baseVersions = baseVersions
|
||||||
|
r.baseVersionsStr = appendVersions("", baseVersions...)
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue