X-Git-Url: http://www.git.cypherpunks.ru/?p=gocheese.git;a=blobdiff_plain;f=refresh.go;h=4a5e962925d7b8ff2a2e7ee3ac0a58fb3ce06658;hp=3404a37bc015a53217bdd42d124f6ebdb2872a09;hb=5f74f27dba4c477281305586ef96a39b4751851e;hpb=11cbb2df8a7cab908182a382e02a23460110dcdf diff --git a/refresh.go b/refresh.go index 3404a37..4a5e962 100644 --- a/refresh.go +++ b/refresh.go @@ -48,28 +48,29 @@ func blake2b256New() hash.Hash { func refreshDir( w http.ResponseWriter, r *http.Request, - dir, - filenameGet string, + pkgName, filenameGet string, gpgUpdate bool, ) bool { - if _, err := os.Stat(filepath.Join(*root, dir, InternalFlag)); err == nil { + if _, err := os.Stat(filepath.Join(*root, pkgName, InternalFlag)); err == nil { return true } - resp, err := http.Get(*pypiURL + dir + "/") + resp, err := http.Get(*pypiURL + pkgName + "/") if err != nil { + log.Println("error", r.RemoteAddr, "refresh", pkgName, err) http.Error(w, err.Error(), http.StatusBadGateway) return false } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { + log.Println("error", r.RemoteAddr, "refresh", pkgName, err) http.Error(w, err.Error(), http.StatusBadGateway) return false } - if !mkdirForPkg(w, r, dir) { + if !mkdirForPkg(w, r, pkgName) { return false } - dirPath := filepath.Join(*root, dir) + dirPath := filepath.Join(*root, pkgName) for _, lineRaw := range bytes.Split(body, []byte("\n")) { submatches := pkgPyPI.FindStringSubmatch(string(lineRaw)) if len(submatches) == 0 { @@ -79,12 +80,13 @@ func refreshDir( filename := submatches[2] pkgURL, err := url.Parse(uri) if err != nil { + log.Println("error", r.RemoteAddr, "refresh", uri, err) http.Error(w, err.Error(), http.StatusBadGateway) return false } if pkgURL.Fragment == "" { - log.Println(r.RemoteAddr, "pypi", filename, "no digest provided") + log.Println(r.RemoteAddr, "pypi", filename, "no digest") http.Error(w, "no digest provided", http.StatusBadGateway) return false } @@ -93,12 +95,13 @@ func refreshDir( // Ancient non PEP-0503 PyPIs, assume MD5 digestInfo = []string{"md5", digestInfo[0]} } else if len(digestInfo) != 2 { - log.Println(r.RemoteAddr, "pypi", filename, "invalid digest provided") + log.Println("error", r.RemoteAddr, "pypi", filename, "invalid digest") http.Error(w, "invalid digest provided", http.StatusBadGateway) return false } digest, err := hex.DecodeString(digestInfo[1]) if err != nil { + log.Println("error", r.RemoteAddr, "pypi", filename, "invalid digest") http.Error(w, err.Error(), http.StatusBadGateway) return false } @@ -119,15 +122,12 @@ func refreshDir( hasherNew = blake2b256New hashSize = blake2b.Size256 default: - log.Println( - r.RemoteAddr, "pypi", filename, - "unknown digest algorithm", hashAlgo, - ) + log.Println("error", r.RemoteAddr, "pypi", filename, "unknown digest", hashAlgo) http.Error(w, "unknown digest algorithm", http.StatusBadGateway) return false } if len(digest) != hashSize { - log.Println(r.RemoteAddr, "pypi", filename, "invalid digest length") + log.Println("error", r.RemoteAddr, "pypi", filename, "invalid digest length") http.Error(w, "invalid digest length", http.StatusBadGateway) return false } @@ -146,10 +146,10 @@ func refreshDir( http.Error(w, "shutting down", http.StatusInternalServerError) return false } - log.Println(r.RemoteAddr, "pypi download", filename) + log.Println(r.RemoteAddr, "pypi", filename, "download") resp, err = http.Get(uri) if err != nil { - log.Println(r.RemoteAddr, "pypi download error:", err.Error()) + log.Println("error", r.RemoteAddr, "pypi", filename, "download", err) http.Error(w, err.Error(), http.StatusBadGateway) return false } @@ -158,6 +158,7 @@ func refreshDir( hasherSHA256 := sha256.New() dst, err := TempFile(dirPath) if err != nil { + log.Println("error", r.RemoteAddr, "pypi", filename, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false } @@ -170,12 +171,14 @@ func refreshDir( if _, err = io.Copy(wr, resp.Body); 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 = dstBuf.Flush(); 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 } @@ -189,18 +192,22 @@ func refreshDir( 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) http.Error(w, err.Error(), http.StatusInternalServerError) return false } if err = os.Rename(dst.Name(), path); err != nil { + log.Println("error", r.RemoteAddr, "pypi", filename, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false } if err = DirSync(dirPath); err != nil { + log.Println("error", r.RemoteAddr, "pypi", filename, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false } @@ -230,14 +237,15 @@ func refreshDir( goto GPGSigSkip } if !bytes.HasPrefix(sig, []byte("-----BEGIN PGP SIGNATURE-----")) { - log.Println(r.RemoteAddr, "pypi non PGP signature", filename) + log.Println(r.RemoteAddr, "pypi", filename+GPGSigExt, "non PGP") goto GPGSigSkip } if err = WriteFileSync(dirPath, path+GPGSigExt, sig); err != nil { + log.Println("error", r.RemoteAddr, "pypi", filename+GPGSigExt, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false } - log.Println(r.RemoteAddr, "pypi downloaded signature", filename) + log.Println(r.RemoteAddr, "pypi", filename+GPGSigExt, "downloaded") } GPGSigSkip: path = path + "." + hashAlgo @@ -246,11 +254,13 @@ func refreshDir( continue } if !os.IsNotExist(err) { + log.Println("error", r.RemoteAddr, "pypi", path, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false } - log.Println(r.RemoteAddr, "pypi touch", filename) + log.Println(r.RemoteAddr, "pypi", filename, "touch") if err = WriteFileSync(dirPath, path, digest); err != nil { + log.Println("error", r.RemoteAddr, "pypi", path, err) http.Error(w, err.Error(), http.StatusInternalServerError) return false }