From 79aac661d144526b914e7d7ae3ecb7f7bce027d4 Mon Sep 17 00:00:00 2001 From: Ramires Viana <59319979+ramiresviana@users.noreply.github.com> Date: Thu, 10 Jul 2025 16:58:52 -0300 Subject: [PATCH] feat: add tus delete handler --- http/http.go | 2 +- http/tus_handlers.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/http/http.go b/http/http.go index 620c43fd..2d87535f 100644 --- a/http/http.go +++ b/http/http.go @@ -69,7 +69,7 @@ func NewHandler( api.PathPrefix("/tus").Handler(monkey(tusPostHandler(), "/api/tus")).Methods("POST") api.PathPrefix("/tus").Handler(monkey(tusHeadHandler(), "/api/tus")).Methods("HEAD", "GET") api.PathPrefix("/tus").Handler(monkey(tusPatchHandler(), "/api/tus")).Methods("PATCH") - api.PathPrefix("/tus").Handler(monkey(resourceDeleteHandler(fileCache), "/api/tus")).Methods("DELETE") + api.PathPrefix("/tus").Handler(monkey(tusDeleteHandler(), "/api/tus")).Methods("DELETE") api.PathPrefix("/usage").Handler(monkey(diskUsage, "/api/usage")).Methods("GET") diff --git a/http/tus_handlers.go b/http/tus_handlers.go index 53b742cc..d24166e6 100644 --- a/http/tus_handlers.go +++ b/http/tus_handlers.go @@ -263,6 +263,40 @@ func tusPatchHandler() handleFunc { }) } +func tusDeleteHandler() handleFunc { + return withUser(func(_ http.ResponseWriter, r *http.Request, d *data) (int, error) { + if r.URL.Path == "/" || !d.user.Perm.Delete { + return http.StatusForbidden, nil + } + + file, err := files.NewFileInfo(&files.FileOptions{ + Fs: d.user.Fs, + Path: r.URL.Path, + Modify: d.user.Perm.Modify, + Expand: false, + ReadHeader: d.server.TypeDetectionByHeader, + Checker: d, + }) + if err != nil { + return errToStatus(err), err + } + + _, err = getActiveUploadLength(file.RealPath()) + if err != nil { + return http.StatusNotFound, err + } + + err = d.user.Fs.RemoveAll(r.URL.Path) + if err != nil { + return errToStatus(err), err + } + + completeUpload(file.RealPath()) + + return http.StatusNoContent, nil + }) +} + func getUploadLength(r *http.Request) (int64, error) { uploadOffset, err := strconv.ParseInt(r.Header.Get("Upload-Length"), 10, 64) if err != nil {