"crypto/sha512"
"encoding/hex"
"encoding/json"
+ "errors"
"hash"
"io"
"io/ioutil"
http.Error(w, "digest mismatch", http.StatusBadGateway)
return false
}
+ if digestStored, err := ioutil.ReadFile(path + "." + hashAlgo); err == nil &&
+ bytes.Compare(digest, digestStored) != 0 {
+ err = errors.New("stored digest mismatch")
+ log.Println("error", r.RemoteAddr, "pypi", filename, err)
+ os.Remove(dst.Name())
+ dst.Close()
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return false
+ }
if !NoSync {
if err = dst.Sync(); err != nil {
os.Remove(dst.Name())