mirror of
https://github.com/drakkan/sftpgo.git
synced 2024-11-25 09:00:27 +00:00
webdav: add support for parsing more time formats
Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
parent
824a70b22d
commit
19da923369
3 changed files with 28 additions and 1 deletions
|
@ -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)
|
||||
|
|
|
@ -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, "", "", "")
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue