mirror of
https://github.com/1Panel-dev/KubePi.git
synced 2025-10-06 07:47:10 +08:00
110 lines
2.3 KiB
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
|
|
}
|