提交 d9af8a22 编写于 作者: LinuxSuRen's avatar LinuxSuRen

Add client for jenkins

上级 c307d30d
package client
import (
"crypto/tls"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type JenkinsCore struct {
JenkinsCrumb
URL string
UserName string
Token string
}
type JenkinsCrumb struct {
CrumbRequestField string
Crumb string
}
func (j *JenkinsCore) AuthHandle(request *http.Request) {
request.SetBasicAuth(j.UserName, j.Token)
}
func (j *JenkinsCore) CrumbHandle(request *http.Request) error {
if c, err := j.GetCrumb(); err == nil {
j.CrumbRequestField = c.CrumbRequestField
j.Crumb = c.Crumb
request.Header.Add(j.CrumbRequestField, j.Crumb)
} else {
return err
}
return nil
}
func (j *JenkinsCore) GetCrumb() (*JenkinsCrumb, error) {
api := fmt.Sprintf("%s/crumbIssuer/api/json", j.URL)
req, err := http.NewRequest("GET", api, nil)
if err != nil {
return nil, err
}
j.AuthHandle(req)
var crumbIssuer JenkinsCrumb
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
if response, err := client.Do(req); err == nil {
if data, err := ioutil.ReadAll(response.Body); err == nil {
if response.StatusCode == 200 {
json.Unmarshal(data, &crumbIssuer)
} else {
return nil, err
}
} else {
return nil, err
}
} else {
return nil, err
}
return &crumbIssuer, nil
}
package client
import (
"crypto/tls"
"fmt"
"log"
"net/http"
)
type PluginManager struct {
JenkinsCore
}
// CheckUpdate fetch the lastest plugins from update center site
func (p *PluginManager) CheckUpdate(handle func(*http.Response)) {
api := fmt.Sprintf("%s/pluginManager/checkUpdatesServer", p.URL)
req, err := http.NewRequest("POST", api, nil)
if err == nil {
p.AuthHandle(req)
} else {
log.Fatal(err)
}
if err = p.CrumbHandle(req); err != nil {
log.Fatal(err)
}
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
if response, err := client.Do(req); err == nil {
p.handleCheck(handle)(response)
} else {
log.Fatal(err)
}
}
func (p *PluginManager) handleCheck(handle func(*http.Response)) func(*http.Response) {
if handle == nil {
handle = func(*http.Response) {}
}
return handle
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册