diff --git a/pkg/model/project.proto b/pkg/model/project.proto index f2b4441feb..0dbea6421a 100644 --- a/pkg/model/project.proto +++ b/pkg/model/project.proto @@ -69,6 +69,7 @@ message ProjectSSOConfig { string client_secret = 2 [(validate.rules).string.min_len = 1]; string base_url = 3; string upload_url = 4; + string proxy_url = 5; } message Google { diff --git a/pkg/oauth/github/github.go b/pkg/oauth/github/github.go index a9b662e5ed..96196bfefd 100644 --- a/pkg/oauth/github/github.go +++ b/pkg/oauth/github/github.go @@ -17,6 +17,7 @@ package github import ( "context" "fmt" + "net/http" "net/url" "github.com/google/go-github/v29/github" @@ -54,9 +55,22 @@ func NewOAuthClient(ctx context.Context, ClientSecret: sso.ClientSecret, Endpoint: oauth2github.Endpoint, } + + if sso.ProxyUrl != "" { + proxyURL, err := url.Parse(sso.ProxyUrl) + if err != nil { + return nil, err + } + + t := http.DefaultTransport.(*http.Transport).Clone() + t.Proxy = http.ProxyURL(proxyURL) + ctx = context.WithValue(ctx, oauth2.HTTPClient, &http.Client{Transport: t}) + } + if enterprise { return newGHEOAuthClient(ctx, sso, code, c, cfg) } + token, err := cfg.Exchange(ctx, code) if err != nil { return nil, err