refactor: move request param extractors to utils

This commit is contained in:
Deluan
2020-02-06 18:55:38 -05:00
parent d9dd9fe587
commit 8673533cd4
11 changed files with 129 additions and 116 deletions
+4 -70
View File
@@ -5,8 +5,6 @@ import (
"mime"
"net/http"
"strconv"
"strings"
"time"
"github.com/deluan/navidrome/consts"
"github.com/deluan/navidrome/engine"
@@ -20,7 +18,7 @@ func NewResponse() *responses.Subsonic {
}
func RequiredParamString(r *http.Request, param string, msg string) (string, error) {
p := ParamString(r, param)
p := utils.ParamString(r, param)
if p == "" {
return "", NewError(responses.ErrorMissingParameter, msg)
}
@@ -28,83 +26,19 @@ func RequiredParamString(r *http.Request, param string, msg string) (string, err
}
func RequiredParamStrings(r *http.Request, param string, msg string) ([]string, error) {
ps := ParamStrings(r, param)
ps := utils.ParamStrings(r, param)
if len(ps) == 0 {
return nil, NewError(responses.ErrorMissingParameter, msg)
}
return ps, nil
}
func ParamString(r *http.Request, param string) string {
return r.URL.Query().Get(param)
}
func ParamStrings(r *http.Request, param string) []string {
return r.URL.Query()[param]
}
func ParamTimes(r *http.Request, param string) []time.Time {
pStr := ParamStrings(r, param)
times := make([]time.Time, len(pStr))
for i, t := range pStr {
ti, err := strconv.ParseInt(t, 10, 64)
if err == nil {
times[i] = utils.ToTime(ti)
}
}
return times
}
func ParamTime(r *http.Request, param string, def time.Time) time.Time {
v := ParamString(r, param)
if v == "" {
return def
}
value, err := strconv.ParseInt(v, 10, 64)
if err != nil {
return def
}
return utils.ToTime(value)
}
func RequiredParamInt(r *http.Request, param string, msg string) (int, error) {
p := ParamString(r, param)
p := utils.ParamString(r, param)
if p == "" {
return 0, NewError(responses.ErrorMissingParameter, msg)
}
return ParamInt(r, param, 0), nil
}
func ParamInt(r *http.Request, param string, def int) int {
v := ParamString(r, param)
if v == "" {
return def
}
value, err := strconv.ParseInt(v, 10, 32)
if err != nil {
return def
}
return int(value)
}
func ParamInts(r *http.Request, param string) []int {
pStr := ParamStrings(r, param)
ints := make([]int, 0, len(pStr))
for _, s := range pStr {
i, err := strconv.ParseInt(s, 10, 32)
if err == nil {
ints = append(ints, int(i))
}
}
return ints
}
func ParamBool(r *http.Request, param string, def bool) bool {
p := ParamString(r, param)
if p == "" {
return def
}
return strings.Index("/true/on/1/", "/"+p+"/") != -1
return utils.ParamInt(r, param, 0), nil
}
type SubsonicError struct {