2016-09-05 22:44:19 -04:00
|
|
|
package registry
|
|
|
|
|
2017-02-13 14:36:09 -05:00
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
|
|
|
|
"github.com/peterhellberg/link"
|
|
|
|
)
|
2016-12-20 01:36:05 -05:00
|
|
|
|
2016-09-05 22:44:19 -04:00
|
|
|
type catalogResponse struct {
|
|
|
|
Repositories []string `json:"repositories"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Catalog returns the repositories in a registry.
|
2016-12-20 01:36:05 -05:00
|
|
|
func (r *Registry) Catalog(u string) ([]string, error) {
|
|
|
|
if u == "" {
|
|
|
|
u = "/v2/_catalog"
|
|
|
|
}
|
2017-02-13 14:36:09 -05:00
|
|
|
uri := r.url(u)
|
|
|
|
r.Logf("registry.catalog url=%s", uri)
|
2016-09-05 22:44:19 -04:00
|
|
|
|
|
|
|
var response catalogResponse
|
2017-02-13 14:36:09 -05:00
|
|
|
h, err := r.getJSON(uri, &response)
|
2016-12-20 01:36:05 -05:00
|
|
|
if err != nil {
|
2016-09-05 22:44:19 -04:00
|
|
|
return nil, err
|
|
|
|
}
|
2016-12-20 01:36:05 -05:00
|
|
|
|
|
|
|
for _, l := range link.ParseHeader(h) {
|
|
|
|
if l.Rel == "next" {
|
2017-02-13 14:36:09 -05:00
|
|
|
unescaped, _ := url.QueryUnescape(l.URI)
|
2017-02-13 04:31:53 -05:00
|
|
|
repos, err := r.Catalog(unescaped)
|
2016-12-20 01:36:05 -05:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
response.Repositories = append(response.Repositories, repos...)
|
|
|
|
}
|
|
|
|
}
|
2016-09-05 22:44:19 -04:00
|
|
|
|
|
|
|
return response.Repositories, nil
|
|
|
|
}
|