X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=refresh.go;h=0764a03385df16a2b681499da4b6f6f3f5377adb;hb=948543909470b983c001f13fb267a64070dd20ae;hp=860267bfe620ca2abb2dc4bd9aac36288a967996;hpb=b461e610332c87d89aca09ad856a53a44f11c61b;p=gocheese.git diff --git a/refresh.go b/refresh.go index 860267b..0764a03 100644 --- a/refresh.go +++ b/refresh.go @@ -1,6 +1,6 @@ /* GoCheese -- Python private package repository and caching proxy -Copyright (C) 2019-2020 Sergey Matveev +Copyright (C) 2019-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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 }