webdav: add support for parsing more time formats

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino 2023-05-16 18:51:42 +02:00
parent 824a70b22d
commit 19da923369
No known key found for this signature in database
GPG key ID: 935D2952DEC4EECF
3 changed files with 28 additions and 1 deletions

View file

@ -443,7 +443,7 @@ func (f *webDavFile) Patch(patches []webdav.Proppatch) ([]webdav.Propstat, error
for _, p := range patch.Props {
if status == http.StatusForbidden && !hasError {
if !patch.Remove && util.Contains(lastModifiedProps, p.XMLName.Local) {
parsed, err := http.ParseTime(string(p.InnerXML))
parsed, err := parseTime(string(p.InnerXML))
if err != nil {
f.Connection.Log(logger.LevelWarn, "unsupported last modification time: %q, err: %v",
string(p.InnerXML), err)

View file

@ -1611,6 +1611,15 @@ func TestMisc(t *testing.T) {
certMgr = oldCertMgr
}
func TestParseTime(t *testing.T) {
res, err := parseTime("Sat, 4 Feb 2023 17:00:50 GMT")
require.NoError(t, err)
require.Equal(t, int64(1675530050), res.Unix())
res, err = parseTime("Wed, 04 Nov 2020 13:25:51 GMT")
require.NoError(t, err)
require.Equal(t, int64(1604496351), res.Unix())
}
func TestConfigsFromProvider(t *testing.T) {
configDir := "."
err := dataprovider.UpdateConfigs(nil, "", "", "")

View file

@ -18,8 +18,10 @@ package webdavd
import (
"fmt"
"net"
"net/http"
"os"
"path/filepath"
"time"
"github.com/go-chi/chi/v5/middleware"
@ -43,6 +45,12 @@ const (
var (
certMgr *common.CertManager
serviceStatus ServiceStatus
timeFormats = []string{
http.TimeFormat,
"Mon, _2 Jan 2006 15:04:05 GMT",
time.RFC850,
time.ANSIC,
}
)
// ServiceStatus defines the service status
@ -352,3 +360,13 @@ func getConfigPath(name, configDir string) string {
}
return name
}
func parseTime(text string) (t time.Time, err error) {
for _, layout := range timeFormats {
t, err = time.Parse(layout, text)
if err == nil {
return
}
}
return
}