diff --git a/http/preview.go b/http/preview.go index f63a985f..26b2d6ca 100644 --- a/http/preview.go +++ b/http/preview.go @@ -4,7 +4,6 @@ import ( "fmt" "image" "net/http" - "net/url" "github.com/disintegration/imaging" "github.com/gorilla/mux" @@ -40,12 +39,7 @@ var previewHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *da return errToStatus(err), err } - if r.URL.Query().Get("inline") == "true" { - w.Header().Set("Content-Disposition", "inline") - } else { - // As per RFC6266 section 4.3 - w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(file.Name)) - } + setContentDisposition(w, r, file) switch file.Type { case "image": diff --git a/http/raw.go b/http/raw.go index e9c393c6..bcd0360d 100644 --- a/http/raw.go +++ b/http/raw.go @@ -22,7 +22,7 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin fileSlice = append(fileSlice, f.Path) } else { for _, name := range names { - name, err := url.QueryUnescape(strings.Replace(name, "+", "%2B", -1)) //nolint:shadow + name, err := url.QueryUnescape(strings.Replace(name, "+", "%2B", -1)) // nolint:shadow if err != nil { return nil, err } @@ -35,7 +35,7 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin return fileSlice, nil } -//nolint: goconst +// nolint: goconst func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) { // TODO: use enum switch r.URL.Query().Get("algo") { @@ -58,6 +58,15 @@ func parseQueryAlgorithm(r *http.Request) (string, archiver.Writer, error) { } } +func setContentDisposition(w http.ResponseWriter, r *http.Request, file *files.FileInfo) { + if r.URL.Query().Get("inline") == "true" { + w.Header().Set("Content-Disposition", "inline") + } else { + // As per RFC6266 section 4.3 + w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(file.Name)) + } +} + var rawHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) { if !d.user.Perm.Download { return http.StatusAccepted, nil @@ -168,12 +177,7 @@ func rawFileHandler(w http.ResponseWriter, r *http.Request, file *files.FileInfo } defer fd.Close() - if r.URL.Query().Get("inline") == "true" { - w.Header().Set("Content-Disposition", "inline") - } else { - // As per RFC6266 section 4.3 - w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(file.Name)) - } + setContentDisposition(w, r, file) http.ServeContent(w, r, file.Name, file.ModTime, fd) return 0, nil