diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 3d29e2e..9bc682d 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -1,6 +1,7 @@ package utils import ( + "encoding/json" "os" "regexp" "strconv" @@ -147,3 +148,38 @@ func ChangeFileHash(name string) error { } return nil } + +func TrimFields(v interface{}) error { + bytes, err := json.Marshal(v) + if err != nil { + return err + } + var mapSI map[string]interface{} + if err := json.Unmarshal(bytes, &mapSI); err != nil { + return err + } + mapSI = trimMapStringInterface(mapSI).(map[string]interface{}) + bytes2, err := json.Marshal(mapSI) + if err != nil { + return err + } + if err := json.Unmarshal(bytes2, v); err != nil { + return err + } + return nil +} + +func trimMapStringInterface(data interface{}) interface{} { + if values, valid := data.([]interface{}); valid { + for i := range values { + data.([]interface{})[i] = trimMapStringInterface(values[i]) + } + } else if values, valid := data.(map[string]interface{}); valid { + for k, v := range values { + data.(map[string]interface{})[k] = trimMapStringInterface(v) + } + } else if value, valid := data.(string); valid { + data = strings.TrimSpace(value) + } + return data +} diff --git a/server/importlist.go b/server/importlist.go index 35272a2..8e0c21a 100644 --- a/server/importlist.go +++ b/server/importlist.go @@ -4,6 +4,7 @@ import ( "fmt" "polaris/ent" "polaris/ent/importlist" + "polaris/pkg/utils" "github.com/gin-gonic/gin" "github.com/pkg/errors" @@ -28,6 +29,8 @@ func (s *Server) addImportlist(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "json") } + utils.TrimFields(&in) + st := s.db.GetStorage(in.StorageId) if st == nil { return nil, fmt.Errorf("storage id not exist: %v", in.StorageId) diff --git a/server/notify_client.go b/server/notify_client.go index 56ed8dd..fc7d125 100644 --- a/server/notify_client.go +++ b/server/notify_client.go @@ -2,6 +2,7 @@ package server import ( "polaris/ent" + "polaris/pkg/utils" "strconv" "github.com/gin-gonic/gin" @@ -35,6 +36,7 @@ func (s *Server) AddNotificationClient(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "json") } + utils.TrimFields(&in) err := s.db.AddNotificationClient(in.Name, in.Service, in.Settings, in.Enabled) if err != nil { diff --git a/server/setting.go b/server/setting.go index e8e664c..b0d5843 100644 --- a/server/setting.go +++ b/server/setting.go @@ -8,6 +8,7 @@ import ( "polaris/ent" "polaris/log" "polaris/pkg/transmission" + "polaris/pkg/utils" "strconv" "github.com/gin-gonic/gin" @@ -32,6 +33,8 @@ func (s *Server) SetSetting(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "bind json") } + utils.TrimFields(&in) + log.Infof("set setting input: %+v", in) if in.TmdbApiKey != "" { if err := s.db.SetSetting(db.SettingTmdbApiKey, in.TmdbApiKey); err != nil { @@ -132,6 +135,7 @@ func (s *Server) AddTorznabInfo(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "bind json") } + utils.TrimFields(&in) log.Infof("add indexer settings: %+v", in) setting := db.TorznabSetting{ @@ -207,6 +211,7 @@ func (s *Server) AddDownloadClient(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "bind json") } + utils.TrimFields(&in) //test connection _, err := transmission.NewClient(transmission.Config{ URL: in.URL, diff --git a/server/storage.go b/server/storage.go index 06d691e..ac28758 100644 --- a/server/storage.go +++ b/server/storage.go @@ -6,6 +6,7 @@ import ( "polaris/log" "polaris/pkg/storage" + "polaris/pkg/utils" "strconv" "github.com/gin-gonic/gin" @@ -22,6 +23,7 @@ func (s *Server) AddStorage(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, errors.Wrap(err, "bind json") } + utils.TrimFields(&in) if in.Implementation == "webdav" { //test webdav