github.com/wtfutil/wtf@v0.43.0/modules/jenkins/client.go (about) 1 package jenkins 2 3 import ( 4 "crypto/tls" 5 "net/http" 6 "net/url" 7 "regexp" 8 "strings" 9 10 "github.com/wtfutil/wtf/utils" 11 ) 12 13 func (widget *Widget) Create(jenkinsURL string, username string, apiKey string) (*View, error) { 14 const apiSuffix = "api/json?pretty=true" 15 view := &View{} 16 parsedSuffix, err := url.Parse(apiSuffix) 17 if err != nil { 18 return view, err 19 } 20 21 parsedJenkinsURL, err := url.Parse(ensureLastSlash(jenkinsURL)) 22 if err != nil { 23 return view, err 24 } 25 jenkinsAPIURL := parsedJenkinsURL.ResolveReference(parsedSuffix) 26 27 req, _ := http.NewRequest("GET", jenkinsAPIURL.String(), http.NoBody) 28 req.SetBasicAuth(username, apiKey) 29 30 httpClient := &http.Client{Transport: &http.Transport{ 31 TLSClientConfig: &tls.Config{ 32 InsecureSkipVerify: !widget.settings.verifyServerCertificate, 33 }, 34 Proxy: http.ProxyFromEnvironment, 35 }, 36 } 37 resp, err := httpClient.Do(req) 38 39 if err != nil { 40 return view, err 41 } 42 defer func() { _ = resp.Body.Close() }() 43 44 err = utils.ParseJSON(view, resp.Body) 45 if err != nil { 46 return view, err 47 } 48 49 respJobs := make([]Job, 0, len(view.Jobs)+len(view.ActiveConfigurations)) 50 respJobs = append(append(respJobs, view.Jobs...), view.ActiveConfigurations...) 51 52 jobs := make([]Job, 0) 53 54 var validID = regexp.MustCompile(widget.settings.jobNameRegex) 55 for _, job := range respJobs { 56 if validID.MatchString(job.Name) { 57 jobs = append(jobs, job) 58 } 59 } 60 61 view.Jobs = jobs 62 63 return view, nil 64 } 65 66 func ensureLastSlash(url string) string { 67 return strings.TrimRight(url, "/") + "/" 68 }