]> Cypherpunks.ru repositories - gocheese.git/commitdiff
Wheel friendliness
authorSergey Matveev <stargrave@stargrave.org>
Fri, 6 Dec 2019 12:44:42 +0000 (15:44 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 6 Dec 2019 12:44:42 +0000 (15:44 +0300)
gocheese.go
gocheese.texi

index 4b47f3c51a72deda900a457e07f9e59166d184a8..25a1b562918b1a6b35f7e48c663cfc38faa21829 100644 (file)
@@ -93,6 +93,8 @@ var (
        warranty         = flag.Bool("warranty", false, "Print warranty information")
 
        killed bool
        warranty         = flag.Bool("warranty", false, "Print warranty information")
 
        killed bool
+
+       normalizationRe *regexp.Regexp = regexp.MustCompilePOSIX("[-_.]+")
 )
 
 func mkdirForPkg(w http.ResponseWriter, r *http.Request, dir string) bool {
 )
 
 func mkdirForPkg(w http.ResponseWriter, r *http.Request, dir string) bool {
@@ -343,6 +345,13 @@ func serveUpload(w http.ResponseWriter, r *http.Request) {
                http.Error(w, err.Error(), http.StatusBadRequest)
                return
        }
                http.Error(w, err.Error(), http.StatusBadRequest)
                return
        }
+       pkgNames, exists := r.MultipartForm.Value["name"]
+       if !exists || len(pkgNames) != 1 {
+               http.Error(w, "name is expected in request", http.StatusBadRequest)
+               return
+       }
+       dir := normalizationRe.ReplaceAllString(pkgNames[0], "-")
+       dirPath := filepath.Join(*root, dir)
        var digestExpected []byte
        if digestExpectedHex, exists := r.MultipartForm.Value["sha256_digest"]; exists {
                digestExpected, err = hex.DecodeString(digestExpectedHex[0])
        var digestExpected []byte
        if digestExpectedHex, exists := r.MultipartForm.Value["sha256_digest"]; exists {
                digestExpected, err = hex.DecodeString(digestExpectedHex[0])
@@ -356,8 +365,6 @@ func serveUpload(w http.ResponseWriter, r *http.Request) {
                filename := file.Filename
                gpgSigsExpected[filename+GPGSigExt] = struct{}{}
                log.Println(r.RemoteAddr, "put", filename, "by", username)
                filename := file.Filename
                gpgSigsExpected[filename+GPGSigExt] = struct{}{}
                log.Println(r.RemoteAddr, "put", filename, "by", username)
-               dir := filename[:strings.LastIndex(filename, "-")]
-               dirPath := filepath.Join(*root, dir)
                path := filepath.Join(dirPath, filename)
                if _, err = os.Stat(path); err == nil {
                        log.Println(r.RemoteAddr, "already exists", filename)
                path := filepath.Join(dirPath, filename)
                if _, err = os.Stat(path); err == nil {
                        log.Println(r.RemoteAddr, "already exists", filename)
@@ -430,8 +437,6 @@ func serveUpload(w http.ResponseWriter, r *http.Request) {
                }
                delete(gpgSigsExpected, filename)
                log.Println(r.RemoteAddr, "put", filename, "by", username)
                }
                delete(gpgSigsExpected, filename)
                log.Println(r.RemoteAddr, "put", filename, "by", username)
-               dir := filename[:strings.LastIndex(filename, "-")]
-               dirPath := filepath.Join(*root, dir)
                path := filepath.Join(dirPath, filename)
                if _, err = os.Stat(path); err == nil {
                        log.Println(r.RemoteAddr, "already exists", filename)
                path := filepath.Join(dirPath, filename)
                if _, err = os.Stat(path); err == nil {
                        log.Println(r.RemoteAddr, "already exists", filename)
index 17bcbedfdcd98fb03a86243e74f4d1c93df75466..e1a796681e268f8c574da77124faf303f10d81f4 100644 (file)
@@ -24,6 +24,7 @@ but nearly all the code was rewritten. It has huge differences:
 
 @itemize
 @item proxying and caching of missing packages, including GPG signatures
 
 @itemize
 @item proxying and caching of missing packages, including GPG signatures
+@item @url{https://pythonwheels.com/, Wheel} uploading support
 @item atomic packages store on filesystem
 @item SHA256-checksummed packages: storing checksums, giving them back,
     verifying stored files integrity, verifying checksum of uploaded
 @item atomic packages store on filesystem
 @item SHA256-checksummed packages: storing checksums, giving them back,
     verifying stored files integrity, verifying checksum of uploaded