From 1bb020b22d7a2b10a25cf28f232f450b5e1ee981 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Sat, 5 Oct 2024 08:41:53 +0800 Subject: [PATCH] feat: add support for insecure TLS connections (#34) - Add `crypto/tls` import in `jenkins.go` - Add `Client` field to `Jenkins` struct - Modify `NewJenkins` function to accept an `insecure` parameter and configure HTTP client accordingly - Update `sendRequest` method to use the `Client` field from the `Jenkins` struct - Update tests in `jenkins_test.go` to include the `insecure` parameter in `NewJenkins` calls - Add `insecure` flag to CLI options in `main.go` - Add `Insecure` field to `Plugin` struct - Update `Plugin.Exec` method to pass `Insecure` field to `NewJenkins` Signed-off-by: appleboy --- jenkins.go | 17 +++++++++++++++-- jenkins_test.go | 6 +++--- main.go | 6 ++++++ plugin.go | 3 ++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/jenkins.go b/jenkins.go index cd42bc4..37331cf 100644 --- a/jenkins.go +++ b/jenkins.go @@ -1,6 +1,7 @@ package main import ( + "crypto/tls" "encoding/json" "fmt" "io" @@ -20,15 +21,27 @@ type ( Jenkins struct { Auth *Auth BaseURL string + Client *http.Client } ) // NewJenkins is initial Jenkins object -func NewJenkins(auth *Auth, url string) *Jenkins { +func NewJenkins(auth *Auth, url string, insecure bool) *Jenkins { url = strings.TrimRight(url, "/") + + client := http.DefaultClient + if insecure { + client = &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + } + } + return &Jenkins{ Auth: auth, BaseURL: url, + Client: client, } } @@ -48,7 +61,7 @@ func (jenkins *Jenkins) sendRequest(req *http.Request) (*http.Response, error) { if jenkins.Auth != nil { req.SetBasicAuth(jenkins.Auth.Username, jenkins.Auth.Token) } - return http.DefaultClient.Do(req) + return jenkins.Client.Do(req) } func (jenkins *Jenkins) parseResponse(resp *http.Response, body interface{}) (err error) { diff --git a/jenkins_test.go b/jenkins_test.go index 05031df..23ad30f 100644 --- a/jenkins_test.go +++ b/jenkins_test.go @@ -12,7 +12,7 @@ func TestParseJobPath(t *testing.T) { Username: "appleboy", Token: "1234", } - jenkins := NewJenkins(auth, "http://example.com") + jenkins := NewJenkins(auth, "http://example.com", false) assert.Equal(t, "/job/foo", jenkins.parseJobPath("/foo/")) assert.Equal(t, "/job/foo", jenkins.parseJobPath("foo/")) @@ -25,7 +25,7 @@ func TestUnSupportProtocol(t *testing.T) { Username: "foo", Token: "bar", } - jenkins := NewJenkins(auth, "example.com") + jenkins := NewJenkins(auth, "example.com", false) err := jenkins.trigger("drone-jenkins", nil) assert.NotNil(t, err) @@ -36,7 +36,7 @@ func TestTriggerBuild(t *testing.T) { Username: "foo", Token: "bar", } - jenkins := NewJenkins(auth, "http://example.com") + jenkins := NewJenkins(auth, "http://example.com", false) err := jenkins.trigger("drone-jenkins", url.Values{"token": []string{"bar"}}) assert.Nil(t, err) diff --git a/main.go b/main.go index 152b207..40b17fd 100644 --- a/main.go +++ b/main.go @@ -54,6 +54,11 @@ func main() { Usage: "jenkins job", EnvVar: "PLUGIN_JOB,JENKINS_JOB,INPUT_JOB", }, + cli.BoolFlag{ + Name: "insecure", + Usage: "allow insecure server connections when using SSL", + EnvVar: "PLUGIN_INSECURE,JENKINS_INSECURE,INPUT_INSECURE", + }, } // Override a template @@ -100,6 +105,7 @@ func run(c *cli.Context) error { Username: c.String("user"), Token: c.String("token"), Job: c.StringSlice("job"), + Insecure: c.Bool("insecure"), } return plugin.Exec() diff --git a/plugin.go b/plugin.go index b1bc905..cc2ea83 100644 --- a/plugin.go +++ b/plugin.go @@ -12,6 +12,7 @@ type ( Username string Token string Job []string + Insecure bool } ) @@ -46,7 +47,7 @@ func (p Plugin) Exec() error { Token: p.Token, } - jenkins := NewJenkins(auth, p.BaseURL) + jenkins := NewJenkins(auth, p.BaseURL, p.Insecure) for _, v := range jobs { if err := jenkins.trigger(v, nil); err != nil {