Ignores invalid timestamps in requests (use current time)

Fix this issue: https://www.reddit.com/r/navidrome/comments/ql3imf/scrobbling_fails_when_using_substreamer/
This commit is contained in:
Deluan 2021-11-02 10:26:43 -04:00
parent 975986ab16
commit 6a87fc88f7
2 changed files with 14 additions and 2 deletions

View File

@ -5,6 +5,8 @@ import (
"strconv"
"strings"
"time"
"github.com/navidrome/navidrome/log"
)
func ParamString(r *http.Request, param string) string {
@ -28,9 +30,12 @@ func ParamTimes(r *http.Request, param string) []time.Time {
times := make([]time.Time, len(pStr))
for i, t := range pStr {
ti, err := strconv.ParseInt(t, 10, 64)
if err == nil {
times[i] = ToTime(ti)
if err != nil {
log.Warn(r.Context(), "Ignoring invalid time param", "time", t, err)
times[i] = time.Now()
continue
}
times[i] = ToTime(ti)
}
return times
}

View File

@ -92,6 +92,13 @@ var _ = Describe("Request Helpers", func() {
It("returns all param occurrences as []time.Time", func() {
Expect(ParamTimes(r, "t")).To(Equal([]time.Time{d1, d2}))
})
It("returns current time as default if param is invalid", func() {
now := time.Now()
r = httptest.NewRequest("GET", "/ping?t=null", nil)
times := ParamTimes(r, "t")
Expect(times).To(HaveLen(1))
Expect(times[0]).To(BeTemporally(">=", now))
})
})
Describe("ParamInt", func() {