From d9af8a227040e25481d0e8af8378c3a32e9f6188 Mon Sep 17 00:00:00 2001 From: Zhao Xiaojie Date: Wed, 26 Jun 2019 14:28:01 +0800 Subject: [PATCH] Add client for jenkins --- client/core.go | 67 ++++++++++++++++++++++++++++++++++++++++++ client/pluginManger.go | 44 +++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 client/core.go create mode 100644 client/pluginManger.go diff --git a/client/core.go b/client/core.go new file mode 100644 index 0000000..6e15d95 --- /dev/null +++ b/client/core.go @@ -0,0 +1,67 @@ +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 +} diff --git a/client/pluginManger.go b/client/pluginManger.go new file mode 100644 index 0000000..d5683c2 --- /dev/null +++ b/client/pluginManger.go @@ -0,0 +1,44 @@ +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 +} -- GitLab