alist/server/webdav/util.go
potoo 479fc6d466
fix(webdav): make sure Mtime after Ctime (#6372 close #6371)
* fix(server/webdav) make sure Mtime >= Ctime

* fix(server/webdav) avoid variable 'stream' collides with imported package name
2024-04-24 17:13:30 +08:00

35 lines
912 B
Go

package webdav
import (
log "github.com/sirupsen/logrus"
"net/http"
"strconv"
"time"
)
func (h *Handler) getModTime(r *http.Request) time.Time {
return h.getHeaderTime(r, "X-OC-Mtime", "")
}
// owncloud/ nextcloud haven't impl this, but we can add the support since rclone may support this soon.
// try ModTime if CreateTime not found in header
func (h *Handler) getCreateTime(r *http.Request) time.Time {
return h.getHeaderTime(r, "X-OC-Ctime", "X-OC-Mtime")
}
func (h *Handler) getHeaderTime(r *http.Request, header, alternative string) time.Time {
hVal := r.Header.Get(header)
// try alternative
if hVal == "" && alternative != "" {
hVal = r.Header.Get(alternative)
}
if hVal != "" {
modTimeUnix, err := strconv.ParseInt(hVal, 10, 64)
if err == nil {
return time.Unix(modTimeUnix, 0)
}
log.Warnf("getModTime in Webdav, failed to parse %s, %s", header, err)
}
return time.Now()
}