Files
KubePi/pkg/util/imagerepo/repos/nexus.go

110 lines
2.3 KiB
Go

package repos
import (
"encoding/json"
"fmt"
)
const (
BaseUrl = "service/rest"
RepoUrl = BaseUrl + "/v1/repositories"
ComponentUrl = BaseUrl + "/v1/components?repository="
)
func NewNexusClient(endpoint, username, password string) *nexusClient {
return &nexusClient{
Username: username,
EndPoint: endpoint,
Password: password,
HttpClient: &HttpClient{
Username: username,
Password: password,
Host: endpoint,
},
}
}
type nexusClient struct {
Username string
Password string
EndPoint string
HttpClient *HttpClient
}
type ItemResult struct {
Items []NameResult
ContinuationToken string `json:"continuationToken"`
}
func (c *nexusClient) Auth() error {
return nil
}
func (c *nexusClient) ListRepos(request ProjectRequest) (names []string, err error) {
body, _, err1 := c.HttpClient.Get(RepoUrl)
if err1 != nil {
err = err1
return
}
var result []NameResult
if err = json.Unmarshal(body, &result); err != nil {
return
}
for _, r := range result {
if r.Format == "docker" {
names = append(names, r.Name)
}
}
return
}
func (c *nexusClient) ListImages(request RepoRequest) (response RepoResponse, err error) {
var url string
url = fmt.Sprintf("%s%s", ComponentUrl, request.Repo)
if request.ContinueToken != "" {
url += "&&continuationToken=" + request.ContinueToken
}
body, _, err1 := c.HttpClient.Get(url)
if err1 != nil {
err = err1
return
}
var result ItemResult
if err = json.Unmarshal(body, &result); err != nil {
return
}
for _, r := range result.Items {
response.Items = append(response.Items, r.Name+":"+r.Version)
}
response.ContinueToken = result.ContinuationToken
return
}
func (c *nexusClient) ListImagesWithoutPage(repository string) (images []string, err error) {
continuationToken := ""
for {
token := ""
if continuationToken != "" {
token = fmt.Sprintf("&&continuationToken=%s", continuationToken)
}
body, _, err1 := c.HttpClient.Get(fmt.Sprintf("%s%s", ComponentUrl, repository) + token)
if err1 != nil {
err = err1
return
}
var result ItemResult
if err = json.Unmarshal(body, &result); err != nil {
return
}
for _, r := range result.Items {
images = append(images, r.Name+":"+r.Version)
}
if result.ContinuationToken == "" {
break
}
continuationToken = result.ContinuationToken
}
return
}