From 459fe380dbc8fa33e4712369cd19323c681af3d4 Mon Sep 17 00:00:00 2001 From: vxclutch Date: Tue, 2 Jun 2026 14:53:21 -0400 Subject: [PATCH] save --- internal/handlers/file.go | 84 ++++++++++----------------------------- templates/share.html | 10 +++-- 2 files changed, 27 insertions(+), 67 deletions(-) diff --git a/internal/handlers/file.go b/internal/handlers/file.go index 3a0831a..5203b63 100644 --- a/internal/handlers/file.go +++ b/internal/handlers/file.go @@ -25,21 +25,9 @@ type ValidateRequest struct { Token string } -type headers map[string]string - -var zipHeaders headers = headers{ - "Content-Disposition": "attachment; filename=lash.zip", - "Content-Type": "application/octet-stream", -} - var sent int = 0 func (h FileHandler) APIHandler(w http.ResponseWriter, r *http.Request) { - if h.hasHitMax() { - w.WriteHeader(http.StatusTooManyRequests) - os.Exit(0) - return - } decoder := json.NewDecoder(r.Body) var t ValidateRequest @@ -54,25 +42,11 @@ func (h FileHandler) APIHandler(w http.ResponseWriter, r *http.Request) { return } - w.WriteHeader(http.StatusOK) - if len(h.FileData) == 1 { - headers := headers{ - "Content-Disposition": fmt.Sprintf("attachment; filename=%s", h.FileData[0].FileName), - "Content-Type": "application/octet-stream", - "Content-Length": strconv.Itoa(len(h.FileData[0].FileName)), - } - headers.set(w) - - w.Write(h.FileData[0].Contents) - } else { - zipHeaders.set(w) - h.writeZip(w) - } - sent++ + http.Redirect(w, r, fmt.Sprintf("/%s", lash.ShareLinkToken), http.StatusTemporaryRedirect) } func (h FileHandler) FileHandler(w http.ResponseWriter, r *http.Request) { - if h.hasHitMax() { + if sent >= h.Ctx.N && h.Ctx.N != -1 { w.WriteHeader(http.StatusTooManyRequests) os.Exit(0) return @@ -80,45 +54,29 @@ func (h FileHandler) FileHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) if len(h.FileData) == 1 { - headers := headers{ - "Content-Disposition": fmt.Sprintf("attachment; filename=%s", h.FileData[0].FileName), - "Content-Type": "application/octet-stream", - "Content-Length": strconv.Itoa(len(h.FileData[0].FileName)), - } - headers.set(w) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", h.FileData[0].FileName)) + w.Header().Set("Content-Type", "application/octet-stream") + w.Header().Set("Content-Length", strconv.Itoa(len(h.FileData[0].FileName))) w.Write(h.FileData[0].Contents) } else { - zipHeaders.set(w) - h.writeZip(w) + w.Header().Set("Content-Disposition", "attachment; filename=lash.zip") + w.Header().Set("Content-Type", "application/octet-stream") + zw := zip.NewWriter(w) + defer zw.Close() + + for _, f := range h.FileData { + w, err := zw.Create(f.FileName) + if err != nil { + errx.FatalPerror(err) + } + + _, err = w.Write(f.Contents) + if err != nil { + errx.FatalPerror(err) + } + } } sent++ } - -func (h FileHandler) writeZip(hw http.ResponseWriter) { - zw := zip.NewWriter(hw) - defer zw.Close() - - for _, f := range h.FileData { - w, err := zw.Create(f.FileName) - if err != nil { - errx.FatalPerror(err) - } - - _, err = w.Write(f.Contents) - if err != nil { - errx.FatalPerror(err) - } - } -} - -func (h headers) set(w http.ResponseWriter) { - for k, v := range h { - w.Header().Set(k, v) - } -} - -func (h FileHandler) hasHitMax() bool { - return sent >= h.Ctx.N && h.Ctx.N != -1 -} diff --git a/templates/share.html b/templates/share.html index bf37c99..f0a5138 100644 --- a/templates/share.html +++ b/templates/share.html @@ -24,10 +24,11 @@