X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=refresh.go;h=0764a03385df16a2b681499da4b6f6f3f5377adb;hb=f3c71e12f9781d266b84d542b950bc77383a1dc1;hp=11c3ab7a52a73db2c3b13aa08a0f4723c7cfbc8a;hpb=cb0449b3d3da2498e360098694a556c882d454bd;p=gocheese.git diff --git a/refresh.go b/refresh.go index 11c3ab7..0764a03 100644 --- a/refresh.go +++ b/refresh.go @@ -37,6 +37,8 @@ import ( "golang.org/x/crypto/blake2b" ) +var pypiHTTPTransport http.Transport + func blake2b256New() hash.Hash { h, err := blake2b.New256(nil) if err != nil { @@ -45,6 +47,15 @@ func blake2b256New() hash.Hash { return h } +func agentedReq(url string) *http.Request { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + log.Fatalln(err) + } + req.Header.Set("User-Agent", UserAgent) + return req +} + func refreshDir( w http.ResponseWriter, r *http.Request, @@ -54,7 +65,8 @@ func refreshDir( if _, err := os.Stat(filepath.Join(*root, pkgName, InternalFlag)); err == nil { return true } - resp, err := http.Get(*pypiURL + pkgName + "/") + c := http.Client{Transport: &pypiHTTPTransport} + resp, err := c.Get(*pypiURL + pkgName + "/") if err != nil { log.Println("error", r.RemoteAddr, "refresh", pkgName, err) http.Error(w, err.Error(), http.StatusBadGateway) @@ -153,7 +165,7 @@ func refreshDir( return false } log.Println(r.RemoteAddr, "pypi", filename, "download") - resp, err = http.Get(uri) + resp, err = c.Do(agentedReq(uri)) if err != nil { log.Println("error", r.RemoteAddr, "pypi", filename, "download", err) http.Error(w, err.Error(), http.StatusBadGateway) @@ -204,12 +216,14 @@ func refreshDir( http.Error(w, "digest mismatch", http.StatusBadGateway) return false } - if err = dst.Sync(); err != nil { - os.Remove(dst.Name()) - dst.Close() - log.Println("error", r.RemoteAddr, "pypi", filename, err) - http.Error(w, err.Error(), http.StatusInternalServerError) - return false + if !NoSync { + if err = dst.Sync(); err != nil { + os.Remove(dst.Name()) + dst.Close() + log.Println("error", r.RemoteAddr, "pypi", filename, err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return false + } } if err = dst.Close(); err != nil { log.Println("error", r.RemoteAddr, "pypi", filename, err) @@ -238,7 +252,7 @@ func refreshDir( if _, err = os.Stat(path); err != nil { goto GPGSigSkip } - resp, err := http.Get(uri + GPGSigExt) + resp, err := c.Do(agentedReq(uri + GPGSigExt)) if err != nil { goto GPGSigSkip }