Skip to content

Commit

Permalink
fix(webdav): optimize HEAD request (close #5182)
Browse files Browse the repository at this point in the history
  • Loading branch information
xhofe committed Sep 6, 2023
1 parent 623c7dc commit d5b68a9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
1 change: 1 addition & 0 deletions server/webdav.go
Expand Up @@ -51,6 +51,7 @@ func WebDAVAuth(c *gin.Context) {
username, password, ok := c.Request.BasicAuth()
if !ok {
bt := c.GetHeader("Authorization")
log.Debugf("[webdav auth] token: %s", bt)
if strings.HasPrefix(bt, "Bearer") {
bt = strings.TrimPrefix(bt, "Bearer ")
token := setting.GetStr(conf.Token)
Expand Down
2 changes: 1 addition & 1 deletion server/webdav/prop.go
Expand Up @@ -460,7 +460,7 @@ type ETager interface {
func findETag(ctx context.Context, ls LockSystem, name string, fi model.Obj) (string, error) {
if do, ok := fi.(ETager); ok {
etag, err := do.ETag(ctx)
if err != ErrNotImplemented {
if !errors.Is(err, ErrNotImplemented) {
return etag, err
}
}
Expand Down
15 changes: 10 additions & 5 deletions server/webdav/webdav.go
Expand Up @@ -8,14 +8,15 @@ package webdav // import "golang.org/x/net/webdav"
import (
"errors"
"fmt"
"github.com/alist-org/alist/v3/internal/stream"
"net/http"
"net/url"
"os"
"path"
"strings"
"time"

"github.com/alist-org/alist/v3/internal/stream"

"github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/fs"
"github.com/alist-org/alist/v3/internal/model"
Expand Down Expand Up @@ -219,20 +220,24 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
user := ctx.Value("user").(*model.User)
reqPath, err = user.JoinPath(reqPath)
if err != nil {
return 403, err
return http.StatusForbidden, err
}
fi, err := fs.Get(ctx, reqPath, &fs.GetArgs{})
if err != nil {
return http.StatusNotFound, err
}
if fi.IsDir() {
return http.StatusMethodNotAllowed, nil
}
etag, err := findETag(ctx, h.LockSystem, reqPath, fi)
if err != nil {
return http.StatusInternalServerError, err
}
w.Header().Set("ETag", etag)
if r.Method == http.MethodHead {
w.Header().Set("Content-Length", fmt.Sprintf("%d", fi.GetSize()))
return http.StatusOK, nil
}
if fi.IsDir() {
return http.StatusMethodNotAllowed, nil
}
// Let ServeContent determine the Content-Type header.
storage, _ := fs.GetStorage(reqPath, &fs.GetStoragesArgs{})
downProxyUrl := storage.GetStorage().DownProxyUrl
Expand Down

0 comments on commit d5b68a9

Please sign in to comment.