"golang.org/x/crypto/blake2b"
)
+var pypiHTTPTransport http.Transport
+
func blake2b256New() hash.Hash {
h, err := blake2b.New256(nil)
if err != nil {
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,
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)
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)
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)
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
}