diff --git a/server/webdav/prop.go b/server/webdav/prop.go index 466644a0..b1474ea3 100644 --- a/server/webdav/prop.go +++ b/server/webdav/prop.go @@ -14,6 +14,7 @@ import ( "net/http" "path" "strconv" + "strings" "time" "github.com/alist-org/alist/v3/internal/model" @@ -385,6 +386,10 @@ func findLastModified(ctx context.Context, ls LockSystem, name string, fi model. return fi.ModTime().UTC().Format(http.TimeFormat), nil } func findCreationDate(ctx context.Context, ls LockSystem, name string, fi model.Obj) (string, error) { + userAgent := ctx.Value("userAgent").(string) + if strings.Contains(strings.ToLower(userAgent), "microsoft-webdav") { + return fi.CreateTime().UTC().Format(http.TimeFormat), nil + } return fi.CreateTime().UTC().Format(time.RFC3339), nil } diff --git a/server/webdav/webdav.go b/server/webdav/webdav.go index 509a7f1c..390e5409 100644 --- a/server/webdav/webdav.go +++ b/server/webdav/webdav.go @@ -6,6 +6,7 @@ package webdav // import "golang.org/x/net/webdav" import ( + "context" "errors" "fmt" "net/http" @@ -619,6 +620,8 @@ func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status return status, err } ctx := r.Context() + userAgent := r.Header.Get("User-Agent") + ctx = context.WithValue(ctx, "userAgent", userAgent) user := ctx.Value("user").(*model.User) reqPath, err = user.JoinPath(reqPath) if err != nil {