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
+7 -2
View File
@@ -5,6 +5,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/navidrome/navidrome/log"
) )
func ParamString(r *http.Request, param string) string { 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)) times := make([]time.Time, len(pStr))
for i, t := range pStr { for i, t := range pStr {
ti, err := strconv.ParseInt(t, 10, 64) ti, err := strconv.ParseInt(t, 10, 64)
if err == nil { if err != nil {
times[i] = ToTime(ti) log.Warn(r.Context(), "Ignoring invalid time param", "time", t, err)
times[i] = time.Now()
continue
} }
times[i] = ToTime(ti)
} }
return times return times
} }
+7
View File
@@ -92,6 +92,13 @@ var _ = Describe("Request Helpers", func() {
It("returns all param occurrences as []time.Time", func() { It("returns all param occurrences as []time.Time", func() {
Expect(ParamTimes(r, "t")).To(Equal([]time.Time{d1, d2})) 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() { Describe("ParamInt", func() {