From 48325fb9a20dcc7fab91c6f3c86618e19057254e Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 6 Dec 2019 15:44:42 +0300 Subject: [PATCH] Wheel friendliness --- gocheese.go | 13 +++++++++---- gocheese.texi | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gocheese.go b/gocheese.go index 4b47f3c..25a1b56 100644 --- a/gocheese.go +++ b/gocheese.go @@ -93,6 +93,8 @@ var ( 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 { @@ -343,6 +345,13 @@ func serveUpload(w http.ResponseWriter, r *http.Request) { 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]) @@ -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) - 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) @@ -430,8 +437,6 @@ func serveUpload(w http.ResponseWriter, r *http.Request) { } 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) diff --git a/gocheese.texi b/gocheese.texi index 17bcbed..e1a7966 100644 --- a/gocheese.texi +++ b/gocheese.texi @@ -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 +@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 -- 2.44.0