diff --git a/cmd/proxy/actions/app_proxy.go b/cmd/proxy/actions/app_proxy.go index 5e39fe1bb..7a7846ce0 100644 --- a/cmd/proxy/actions/app_proxy.go +++ b/cmd/proxy/actions/app_proxy.go @@ -43,6 +43,20 @@ func addProxyRoutes( } r.HandleFunc("/index", indexHandler(indexer)) + var firstGoProxyUrl *url.URL + if goBinVarProxy, has := c.GoBinaryEnvVars.GetValue("GOPROXY"); has { + for _, proxy := range strings.Split(goBinVarProxy, ",") { + if proxy == "direct" { + continue + } + firstGoProxyUrl, err = url.Parse(proxy) + if err != nil { + return err + } + break + } + } + for _, sumdb := range c.SumDBs { sumdbURL, err := url.Parse(sumdb) if err != nil { @@ -55,11 +69,21 @@ func addProxyRoutes( r.HandleFunc(supportPath, func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }) - sumHandler := sumdbProxy(sumdbURL, c.NoSumPatterns) - pathPrefix := "/sumdb/" + sumdbURL.Host - r.PathPrefix(pathPrefix + "/").Handler( - http.StripPrefix(strings.TrimSuffix(c.PathPrefix, "/")+pathPrefix, sumHandler), - ) + + var sumHandler http.Handler + if sumdbURL.Host == "sum.golang.org" && firstGoProxyUrl != nil{ + pathPrefix := "/sumdb/" + sumdbURL.Host + sumdbURL.Scheme = firstGoProxyUrl.Scheme + sumdbURL.Host = firstGoProxyUrl.Host + sumHandler = sumdbProxy(sumdbURL, c.NoSumPatterns) + r.PathPrefix(pathPrefix + "/").Handler(sumHandler) + } else { + sumHandler = sumdbProxy(sumdbURL, c.NoSumPatterns) + pathPrefix := "/sumdb/" + sumdbURL.Host + r.PathPrefix(pathPrefix + "/").Handler( + http.StripPrefix(strings.TrimSuffix(c.PathPrefix, "/")+pathPrefix, sumHandler), + ) + } } // Download Protocol diff --git a/pkg/config/config.go b/pkg/config/config.go index 1bd9fa08d..c9b645c9a 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -77,6 +77,16 @@ func (el EnvList) HasKey(key string) bool { return false } +func (el EnvList) GetValue(key string) (string, bool){ + prefix := key+"=" + for _, env := range el { + if strings.HasPrefix(env, prefix) { + return env[len(prefix):], true + } + } + return "", false +} + // Add adds a key=value entry to the environment // list func (el *EnvList) Add(key, value string) {