]> Cypherpunks.ru repositories - gocheese.git/blobdiff - refresh.go
Update dependencies
[gocheese.git] / refresh.go
index 860267bfe620ca2abb2dc4bd9aac36288a967996..0764a03385df16a2b681499da4b6f6f3f5377adb 100644 (file)
@@ -1,6 +1,6 @@
 /*
 GoCheese -- Python private package repository and caching proxy
-Copyright (C) 2019-2020 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2019-2021 Sergey Matveev <stargrave@stargrave.org>
 
 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
                        }