X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=refresh.go;h=11325e275c3d6c9f2002f97cd2dce6079e25c211;hb=899fd251608c137ed4c6bab5fc2ec757a294b482;hp=625f840b5f3115b99b558f838f5d8953eddbc4be;hpb=0d804c602fbc55f58d04fa9657950f3a6aac6d81;p=gocheese.git diff --git a/refresh.go b/refresh.go index 625f840..11325e2 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 { @@ -54,12 +56,19 @@ 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) return false } + if resp.StatusCode != http.StatusOK { + resp.Body.Close() + log.Println("error", r.RemoteAddr, "refresh", pkgName, "HTTP status:", resp.Status) + http.Error(w, "PyPI has non 200 status code", http.StatusBadGateway) + return false + } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { @@ -154,6 +163,15 @@ func refreshDir( return false } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + log.Println( + "error", r.RemoteAddr, + "pypi", filename, "download", + "HTTP status:", resp.Status, + ) + http.Error(w, "PyPI has non 200 status code", http.StatusBadGateway) + return false + } hasher := hasherNew() hasherSHA256 := sha256.New() dst, err := TempFile(dirPath)