From ce3e69847b2f26a7d67218d45ba4fface94ffe22 Mon Sep 17 00:00:00 2001 From: Xuebin He Date: Tue, 24 Oct 2017 16:03:27 -0400 Subject: [PATCH] Allow insecure connection to private Enterprise github --- README.md | 3 +++ github.go | 25 +++++++++++++++++-------- resources.go | 1 + 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a3cb01f..0ef6418 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,9 @@ Fetches and creates versioned GitHub resources. for uploading. If `github_api_url` is set, this value defaults to the same value, but if you have your own endpoint, this field will override it. +* `insecure`: *Optional. Default `false`.* When set to `true`, concourse will allow + insecure connection to your github API. + * `release`: *Optional. Default `true`.* When set to `true`, `put` produces release and `check` detects releases. If `false`, `put` and `check` will ignore releases. Note that releases must have semver compliant tags to be detected. diff --git a/github.go b/github.go index 532347b..a8e7195 100644 --- a/github.go +++ b/github.go @@ -1,6 +1,7 @@ package resource import ( + "crypto/tls" "errors" "io" "net/http" @@ -40,18 +41,26 @@ type GitHubClient struct { } func NewGitHubClient(source Source) (*GitHubClient, error) { - var client *github.Client + var httpClient = &http.Client{} + var ctx = context.TODO() - if source.AccessToken == "" { - client = github.NewClient(nil) - } else { + if source.Insecure { + httpClient.Transport = &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + ctx = context.WithValue(ctx, oauth2.HTTPClient, httpClient) + } + + if source.AccessToken != "" { var err error - client, err = oauthClient(source) + httpClient, err = oauthClient(ctx, source) if err != nil { return nil, err } } + client := github.NewClient(httpClient) + if source.GitHubAPIURL != "" { var err error client.BaseURL, err = url.Parse(source.GitHubAPIURL) @@ -238,16 +247,16 @@ func (g *GitHubClient) GetZipballLink(tag string) (*url.URL, error) { return u, nil } -func oauthClient(source Source) (*github.Client, error) { +func oauthClient(ctx context.Context, source Source) (*http.Client, error) { ts := oauth2.StaticTokenSource(&oauth2.Token{ AccessToken: source.AccessToken, }) - oauthClient := oauth2.NewClient(oauth2.NoContext, ts) + oauthClient := oauth2.NewClient(ctx, ts) githubHTTPClient := &http.Client{ Transport: oauthClient.Transport, } - return github.NewClient(githubHTTPClient), nil + return githubHTTPClient, nil } diff --git a/resources.go b/resources.go index 05c3fa1..a54aacc 100644 --- a/resources.go +++ b/resources.go @@ -13,6 +13,7 @@ type Source struct { Drafts bool `json:"drafts"` PreRelease bool `json:"pre_release"` Release bool `json:"release"` + Insecure bool `json:"insecure"` } type CheckRequest struct {