Fix bug: Failed to get repository tags

Listing repository tags will fail if the repository name contains string
'service'

Fixed in registryutils.go. Use regrexp instead of splitting strings by
'service'.
This commit is contained in:
Ben Ji 2016-03-31 10:20:13 +08:00
parent 3ebb2dea0f
commit 0d7f109e42

View File

@ -21,7 +21,7 @@ import (
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"os" "os"
"strings" "regexp"
"github.com/vmware/harbor/utils/log" "github.com/vmware/harbor/utils/log"
) )
@ -62,22 +62,13 @@ func RegistryAPIGet(url, username string) ([]byte, error) {
} else if response.StatusCode == http.StatusUnauthorized { } else if response.StatusCode == http.StatusUnauthorized {
authenticate := response.Header.Get("WWW-Authenticate") authenticate := response.Header.Get("WWW-Authenticate")
log.Debugf("authenticate header: %s", authenticate) log.Debugf("authenticate header: %s", authenticate)
str := strings.Split(authenticate, " ")[1]
var service string var service string
var scope string var scope string
strs := strings.Split(str, ",") re := regexp.MustCompile(`service=\"(.*?)\".*scope=\"(.*?)\"`)
for _, s := range strs { res := re.FindStringSubmatch(authenticate)
if strings.Contains(s, "service") { if len(res) > 2 {
service = s service = res[1]
} else if strings.Contains(s, "scope") { scope = res[2]
scope = s
}
}
if arr := strings.Split(service, "\""); len(arr) > 1 {
service = arr[1]
}
if arr := strings.Split(scope, "\""); len(arr) > 1 {
scope = arr[1]
} }
token, err := GenTokenForUI(username, service, scope) token, err := GenTokenForUI(username, service, scope)
if err != nil { if err != nil {