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  }