crumbIssuer.go 1.9 KB
Newer Older
LinuxSuRen's avatar
LinuxSuRen 已提交
1 2 3
package cmd

import (
LinuxSuRen's avatar
LinuxSuRen 已提交
4
	"crypto/tls"
5
	"encoding/base64"
LinuxSuRen's avatar
LinuxSuRen 已提交
6 7 8 9 10
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
11
	"net/url"
LinuxSuRen's avatar
LinuxSuRen 已提交
12 13 14 15

	"github.com/spf13/cobra"
)

16 17
//curl -k -u $JENKINS_USER:$JENKINS_TOKEN $JENKINS_URL/crumbIssuer/api/json -s

LinuxSuRen's avatar
LinuxSuRen 已提交
18 19 20 21 22 23 24 25 26 27 28
// Start contains the command line options
type CrumbIssuerOptions struct {
	Upload bool
}

func init() {
	rootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
	Use:   "crumb",
29 30
	Short: "Print crumbIssuer of Jenkins",
	Long:  `Print crumbIssuer of Jenkins`,
yJunS's avatar
yJunS 已提交
31
	Run: func(_ *cobra.Command, _ []string) {
LinuxSuRen's avatar
LinuxSuRen 已提交
32 33
		crumb, _ := getCrumb()
		fmt.Printf("%s=%s", crumb.CrumbRequestField, crumb.Crumb)
LinuxSuRen's avatar
LinuxSuRen 已提交
34 35 36 37 38 39 40 41
	},
}

type CrumbIssuer struct {
	Crumb             string `json:"crumb"`
	CrumbRequestField string `json:"crumbRequestField"`
}

LinuxSuRen's avatar
LinuxSuRen 已提交
42
func getCrumb() (CrumbIssuer, *JenkinsServer) {
43
	config := getCurrentJenkins()
LinuxSuRen's avatar
LinuxSuRen 已提交
44

45
	jenkinsRoot := config.URL
LinuxSuRen's avatar
LinuxSuRen 已提交
46 47 48 49 50 51
	api := fmt.Sprintf("%s/crumbIssuer/api/json", jenkinsRoot)

	req, err := http.NewRequest("GET", api, nil)
	if err != nil {
		log.Fatal(err)
	}
52
	req.SetBasicAuth(config.UserName, config.Token)
LinuxSuRen's avatar
LinuxSuRen 已提交
53 54

	var crumbIssuer CrumbIssuer
LinuxSuRen's avatar
LinuxSuRen 已提交
55 56 57
	tr := &http.Transport{
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}
58 59 60 61 62 63 64 65 66 67 68 69

	if config.ProxyAuth != "" {
		basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(config.ProxyAuth))
		req.Header.Add("Proxy-Authorization", basicAuth)

		tr.ProxyConnectHeader = http.Header{}
		tr.ProxyConnectHeader.Add("Proxy-Authorization", basicAuth)

		if proxyURL, err := url.Parse(config.Proxy); err == nil {
			tr.Proxy = http.ProxyURL(proxyURL)
		}
	}
LinuxSuRen's avatar
LinuxSuRen 已提交
70
	client := &http.Client{Transport: tr}
LinuxSuRen's avatar
LinuxSuRen 已提交
71 72
	if response, err := client.Do(req); err == nil {
		if data, err := ioutil.ReadAll(response.Body); err == nil {
LinuxSuRen's avatar
LinuxSuRen 已提交
73 74 75 76 77 78
			if response.StatusCode == 200 {
				json.Unmarshal(data, &crumbIssuer)
			} else {
				fmt.Println("get curmb error")
				log.Fatal(string(data))
			}
LinuxSuRen's avatar
LinuxSuRen 已提交
79 80 81 82 83 84 85 86
		} else {
			log.Fatal(err)
		}
	} else {
		log.Fatal(err)
	}
	return crumbIssuer, config
}