mirror of
https://github.com/1Panel-dev/KubePi.git
synced 2025-10-05 23:37:01 +08:00
82 lines
1.7 KiB
Go
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
|
|
}
|