]> Cypherpunks.ru repositories - gocheese.git/commitdiff
Save BLAKE2b-256 checksum during download
authorSergey Matveev <stargrave@stargrave.org>
Sat, 25 Sep 2021 20:32:36 +0000 (23:32 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 26 Sep 2021 17:15:43 +0000 (20:15 +0300)
refresh.go

index 092bd0125fa9ae555cb8a18b14c89ffd1440967f..67efe578d1c53891c42204c21c64fae11d63a488 100644 (file)
@@ -378,6 +378,7 @@ func refreshDir(
                        }
                        hasher := hasherNew()
                        hasherSHA256 := sha256.New()
+                       hasherBLAKE2b256 := blake2b256New()
                        dst, err := TempFile(dirPath)
                        if err != nil {
                                log.Println("error", r.RemoteAddr, "pypi", filename, err)
@@ -389,6 +390,9 @@ func refreshDir(
                        if hashAlgo != HashAlgoSHA256 {
                                wrs = append(wrs, hasherSHA256)
                        }
+                       if hashAlgo != HashAlgoBLAKE2b256 {
+                               wrs = append(wrs, hasherBLAKE2b256)
+                       }
                        wr := io.MultiWriter(wrs...)
                        if _, err = io.Copy(wr, resp.Body); err != nil {
                                os.Remove(dst.Name())
@@ -439,13 +443,45 @@ func refreshDir(
                                http.Error(w, err.Error(), http.StatusInternalServerError)
                                return false
                        }
-                       if hashAlgo != HashAlgoSHA256 {
-                               hashAlgo = HashAlgoSHA256
-                               digest = hasherSHA256.Sum(nil)
-                               for _, algo := range KnownHashAlgos[1:] {
-                                       os.Remove(path + "." + algo)
-                               }
+
+                       var digestSHA256 []byte
+                       var digestBLAKE2b256 []byte
+                       if hashAlgo == HashAlgoSHA256 {
+                               digestSHA256 = hasher.Sum(nil)
+                       } else {
+                               digestSHA256 = hasherSHA256.Sum(nil)
+                       }
+                       if hashAlgo == HashAlgoBLAKE2b256 {
+                               digestBLAKE2b256 = hasher.Sum(nil)
+                       } else {
+                               digestBLAKE2b256 = hasherBLAKE2b256.Sum(nil)
+                       }
+                       if err = WriteFileSync(
+                               dirPath, path+"."+HashAlgoSHA256,
+                               digestSHA256, mtime,
+                       ); err != nil {
+                               log.Println(
+                                       "error", r.RemoteAddr, "pypi",
+                                       path+"."+HashAlgoSHA256, err,
+                               )
+                               http.Error(w, err.Error(), http.StatusInternalServerError)
+                               return false
+                       }
+                       if err = WriteFileSync(
+                               dirPath, path+"."+HashAlgoBLAKE2b256,
+                               digestBLAKE2b256, mtime,
+                       ); err != nil {
+                               log.Println(
+                                       "error", r.RemoteAddr, "pypi",
+                                       path+"."+HashAlgoBLAKE2b256, err,
+                               )
+                               http.Error(w, err.Error(), http.StatusInternalServerError)
+                               return false
+                       }
+                       for _, algo := range KnownHashAlgos[2:] {
+                               os.Remove(path + "." + algo)
                        }
+                       digest = nil
                }
                if mtimeExists {
                        stat, err := os.Stat(path)
@@ -498,6 +534,9 @@ func refreshDir(
                }
 
        GPGSigSkip:
+               if digest == nil {
+                       continue
+               }
                path = path + "." + hashAlgo
                stat, err := os.Stat(path)
                if err == nil &&