mirror of
https://github.com/mayflower/docker-ls.git
synced 2025-11-26 12:03:12 +03:00
81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
package lib
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"git.mayflower.de/vaillant-team/docker-ls/lib/connector"
|
|
)
|
|
|
|
type registryApi struct {
|
|
cfg Config
|
|
connector connector.Connector
|
|
}
|
|
|
|
func (r *registryApi) endpointUrl(path string) *url.URL {
|
|
url := r.cfg.registryUrl
|
|
|
|
url.Path = path
|
|
|
|
return &url
|
|
}
|
|
|
|
func (r *registryApi) paginatedRequestEndpointUrl(path string, lastApiResponse *http.Response) (url *url.URL, err error) {
|
|
url = r.endpointUrl(path)
|
|
|
|
if lastApiResponse != nil {
|
|
linkHeader := lastApiResponse.Header.Get("link")
|
|
|
|
if linkHeader != "" {
|
|
// This is a hack to work around what looks like a bug in the registry:
|
|
// the supplied link URL currently lacks scheme and host
|
|
scheme, host := url.Scheme, url.Host
|
|
|
|
url, err = parseLinkToNextHeader(linkHeader)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if url.Scheme == "" {
|
|
url.Scheme = scheme
|
|
}
|
|
|
|
if url.Host == "" {
|
|
url.Host = host
|
|
}
|
|
}
|
|
} else {
|
|
queryParams := url.Query()
|
|
queryParams.Set("n", strconv.Itoa(int(r.pageSize())))
|
|
url.RawQuery = queryParams.Encode()
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (r *registryApi) pageSize() uint {
|
|
return r.cfg.pageSize
|
|
}
|
|
|
|
func (r *registryApi) GetStatistics() connector.Statistics {
|
|
return r.connector.GetStatistics()
|
|
}
|
|
|
|
func NewRegistryApi(cfg Config) (api RegistryApi, err error) {
|
|
err = cfg.Validate()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
registry := ®istryApi{
|
|
cfg: cfg,
|
|
}
|
|
|
|
registry.connector = createConnector(®istry.cfg)
|
|
|
|
api = registry
|
|
return
|
|
}
|