Files
KubePi/pkg/util/imagerepo/repos/http_client.go
2022-05-19 14:25:49 +08:00

82 lines
1.7 KiB
Go

package repos
import (
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"time"
)
type HttpClient struct {
Username string
Password string
Host string
}
type NameResult struct {
Name string
Version string
Format string
ProjectID int `json:"project_id"`
}
func (h *HttpClient) NewRequest(method, endpoint string) (request *http.Request, err error) {
url := fmt.Sprintf("%s/%s", h.Host, endpoint)
request, err = http.NewRequest(method, url, nil)
if err != nil {
return
}
if h.Username != "" && h.Password != "" {
request.SetBasicAuth(h.Username, h.Password)
}
return
}
func (h *HttpClient) Do(request *http.Request) (body []byte, resp *http.Response, err error) {
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Timeout: 30 * time.Second, Transport: tr}
resp, err = client.Do(request)
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
body, err = ioutil.ReadAll(resp.Body)
return
}
err = errors.New(resp.Status)
return
}
func (h *HttpClient) http(method, endpoint string) ([]byte, *http.Response, error) {
request, err := h.NewRequest(method, endpoint)
if err != nil {
return nil, nil, err
}
return h.Do(request)
}
func (h *HttpClient) Get(endpoint string) ([]byte, *http.Response, error) {
return h.http(http.MethodGet, endpoint)
}
func (h *HttpClient) GetNameResult(url string) ([]NameResult, error) {
body, _, err := h.Get(url)
if err != nil {
return nil, err
}
var result []NameResult
if err = json.Unmarshal(body, &result); err != nil {
return result, err
}
return result, err
}