diff --git a/go.mod b/go.mod index 0b6bf08ec90..e22b2640894 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ module code.vikunja.io/api require ( cloud.google.com/go v0.34.0 // indirect - code.vikunja.io/web v0.0.0-20190507193736-edb39812af9c + code.vikunja.io/web v0.0.0-20190628071027-b5c16e24b0a7 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a github.com/beevik/etree v1.1.0 // indirect @@ -64,9 +64,6 @@ require ( github.com/swaggo/swag v1.5.0 golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 golang.org/x/lint v0.0.0-20190409202823-959b441ac422 - golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect - golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb // indirect - golang.org/x/tools v0.0.0-20190628034336-212fb13d595e // indirect google.golang.org/appengine v1.5.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/d4l3k/messagediff.v1 v1.2.1 diff --git a/go.sum b/go.sum index 8c8ecf047a8..906eaa69065 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= code.vikunja.io/web v0.0.0-20190507193736-edb39812af9c h1:L8aPCsaLQe9qytRavkRqipse64EbDK8mFijm+9SKf7I= code.vikunja.io/web v0.0.0-20190507193736-edb39812af9c/go.mod h1:9dOotUqYZJhDhimNh4Xo4e2i+8cR+qPFEQNCUzaplsI= +code.vikunja.io/web v0.0.0-20190628071027-b5c16e24b0a7 h1:P9ncMaJE7RbYqBXF9lwT0hab7EPwuHOPslz3k1VxFs8= +code.vikunja.io/web v0.0.0-20190628071027-b5c16e24b0a7/go.mod h1:cuP1/ieGWAZzgQGw+QPt6Y5F0fVb/8Ol5NV4QSezGdo= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= diff --git a/vendor/code.vikunja.io/web/Readme.md b/vendor/code.vikunja.io/web/Readme.md index 5783050f911..a4a00a35f2c 100644 --- a/vendor/code.vikunja.io/web/Readme.md +++ b/vendor/code.vikunja.io/web/Readme.md @@ -194,7 +194,7 @@ type HTTPError struct { } ``` -You can learn more about how exactly custom error types are created in the [vikunja docs](https://git.kolaente.de/vikunja/api/src/branch/master/docs/practical-instructions/errors.md). +You can learn more about how exactly custom error types are created in the [vikunja docs](https://vikunja.io/docs/custom-errors/). ## How the url param binder works diff --git a/vendor/code.vikunja.io/web/go.mod b/vendor/code.vikunja.io/web/go.mod index 7eb45c7af34..d5ba24afeaa 100644 --- a/vendor/code.vikunja.io/web/go.mod +++ b/vendor/code.vikunja.io/web/go.mod @@ -1,11 +1,10 @@ module code.vikunja.io/web require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/labstack/echo/v4 v4.1.5 + github.com/labstack/echo/v4 v4.1.7-0.20190627175217-8fb7b5be270f github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 - golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284 // indirect - golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c // indirect - golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b // indirect - golang.org/x/text v0.3.2 // indirect + golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 // indirect + golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect + golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb // indirect + golang.org/x/tools v0.0.0-20190628034336-212fb13d595e // indirect ) diff --git a/vendor/code.vikunja.io/web/go.sum b/vendor/code.vikunja.io/web/go.sum index ebcf6ede229..2f26d67d2a0 100644 --- a/vendor/code.vikunja.io/web/go.sum +++ b/vendor/code.vikunja.io/web/go.sum @@ -4,18 +4,29 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/labstack/echo/v4 v4.1.5 h1:RztCXCvfMljychg0G/IzW5T7hL6ADqqwREwcX279Q1g= github.com/labstack/echo/v4 v4.1.5/go.mod h1:3LbYC6VkwmUnmLPZ8WFdHdQHG77e9GQbjyhWdb1QvC4= +github.com/labstack/echo/v4 v4.1.6 h1:WOvLa4T1KzWCRpANwz0HGgWDelXSSGwIKtKBbFdHTv4= +github.com/labstack/echo/v4 v4.1.6/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE= +github.com/labstack/echo/v4 v4.1.7-0.20190627175217-8fb7b5be270f h1:fNJtR+TNyxTdYCZU40fc8Or8RyBqMOKYNv+Zay5gjvk= +github.com/labstack/echo/v4 v4.1.7-0.20190627175217-8fb7b5be270f/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE= github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0= github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= +github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU= +github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -26,15 +37,32 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284 h1:rlLehGeYg6jfoyz/eDqDU1iRXLKfR42nnNh57ytKEWo= golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 h1:ydJNl0ENAG67pFbB+9tfhiL2pYqLhfoaZFw/cjLhY4A= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190607181551-461777fb6f67/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190621203818-d432491b9138 h1:t8BZD9RDjkm9/h7yYN6kE8oaeov5r9aztkB7zKA5Tkg= +golang.org/x/sys v0.0.0-20190621203818-d432491b9138/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628034336-212fb13d595e/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= diff --git a/vendor/code.vikunja.io/web/handler/create.go b/vendor/code.vikunja.io/web/handler/create.go index a140f13763d..6a2bc03268d 100644 --- a/vendor/code.vikunja.io/web/handler/create.go +++ b/vendor/code.vikunja.io/web/handler/create.go @@ -26,7 +26,7 @@ func (c *WebHandler) CreateWeb(ctx echo.Context) error { currentStruct := c.EmptyStruct() // Get the object & bind params to struct - if err := ParamBinder(currentStruct, ctx); err != nil { + if err := ctx.Bind(currentStruct); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.") } diff --git a/vendor/code.vikunja.io/web/handler/delete.go b/vendor/code.vikunja.io/web/handler/delete.go index 715adc4ed74..6053bc0e378 100644 --- a/vendor/code.vikunja.io/web/handler/delete.go +++ b/vendor/code.vikunja.io/web/handler/delete.go @@ -31,7 +31,7 @@ func (c *WebHandler) DeleteWeb(ctx echo.Context) error { currentStruct := c.EmptyStruct() // Bind params to struct - if err := ParamBinder(currentStruct, ctx); err != nil { + if err := ctx.Bind(currentStruct); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "Invalid URL param.") } diff --git a/vendor/code.vikunja.io/web/handler/paramBinder.go b/vendor/code.vikunja.io/web/handler/paramBinder.go deleted file mode 100644 index e24eb2a4755..00000000000 --- a/vendor/code.vikunja.io/web/handler/paramBinder.go +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright (c) 2018 Vikunja and contributors. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -package handler - -import ( - "errors" - "github.com/labstack/echo/v4" - "reflect" - "strconv" - "strings" -) - -const paramTagName = "param" - -// ParamBinder binds parameters to a struct. -// Currently a working implementation, waiting to implement this officially into echo. -func ParamBinder(i interface{}, c echo.Context) (err error) { - - // Default binder - db := new(echo.DefaultBinder) - if err = db.Bind(i, c); err != nil { - return - } - - paramNames := c.ParamNames() - paramValues := c.ParamValues() - paramVars := make(map[string][]string) - for in, name := range paramNames { - // Hotfix for an echo bug where a param name would show up which dont exist - names := strings.Split(name, ",") - for _, n := range names { - paramVars[n] = append(paramVars[name], paramValues[in]) - } - } - - b := Binder{} - err = b.bindData(i, paramVars, paramTagName) - - /* - // Our custom magic starts here - paramNames := c.ParamNames() - paramValues := c.ParamValues() - - v := reflect.ValueOf(i) - t := reflect.TypeOf(i) - s := reflect.ValueOf(i).Elem() - for i := 0; i < v.NumField(); i++ { - field := t.Field(i) - f := s.Field(i) - - // Check if it has a param tag - tag := field.Tag.Get(paramTagName) - if tag != "" { - // If it has one, range over all url parameters to see if we have a match - for in, name := range paramNames { - // Found match - if tag == name { - // Put the value of that match in our sruct - switch field.Type.Name() { - case "int64": // SetInt only accepts int64, so the struct field can only have int64 of int (no int32/16/int...) - intParam, err := strconv.ParseInt(paramValues[in], 10, 64) - f.SetInt(intParam) - - if err != nil { - return err - } - case "string": - f.SetString(paramValues[in]) - } - } - } - } - - - - - //f.SetString("blub") - - }*/ - - return -} - -// Binder represents a binder -type Binder struct{} - -func (b *Binder) bindData(ptr interface{}, data map[string][]string, tag string) error { - typ := reflect.TypeOf(ptr).Elem() - val := reflect.ValueOf(ptr).Elem() - - if typ.Kind() != reflect.Struct { - return errors.New("Binding element must be a struct") - } - - for i := 0; i < typ.NumField(); i++ { - typeField := typ.Field(i) - structField := val.Field(i) - if !structField.CanSet() { - continue - } - structFieldKind := structField.Kind() - inputFieldName := typeField.Tag.Get(tag) - - if inputFieldName == "" { - inputFieldName = typeField.Name - // If tag is nil, we inspect if the field is a struct. - if _, ok := bindUnmarshaler(structField); !ok && structFieldKind == reflect.Struct { - err := b.bindData(structField.Addr().Interface(), data, tag) - if err != nil { - return err - } - continue - } - } - inputValue, exists := data[inputFieldName] - if !exists { - continue - } - - // Call this first, in case we're dealing with an alias to an array type - if ok, err := unmarshalField(typeField.Type.Kind(), inputValue[0], structField); ok { - if err != nil { - return err - } - continue - } - - numElems := len(inputValue) - if structFieldKind == reflect.Slice && numElems > 0 { - sliceOf := structField.Type().Elem().Kind() - slice := reflect.MakeSlice(structField.Type(), numElems, numElems) - for j := 0; j < numElems; j++ { - if err := setWithProperType(sliceOf, inputValue[j], slice.Index(j)); err != nil { - return err - } - } - val.Field(i).Set(slice) - } else { - if err := setWithProperType(typeField.Type.Kind(), inputValue[0], structField); err != nil { - return err - } - } - } - return nil -} - -func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value) error { - // But also call it here, in case we're dealing with an array of BindUnmarshalers - if ok, err := unmarshalField(valueKind, val, structField); ok { - return err - } - - switch valueKind { - case reflect.Int: - return setIntField(val, 0, structField) - case reflect.Int8: - return setIntField(val, 8, structField) - case reflect.Int16: - return setIntField(val, 16, structField) - case reflect.Int32: - return setIntField(val, 32, structField) - case reflect.Int64: - return setIntField(val, 64, structField) - case reflect.Uint: - return setUintField(val, 0, structField) - case reflect.Uint8: - return setUintField(val, 8, structField) - case reflect.Uint16: - return setUintField(val, 16, structField) - case reflect.Uint32: - return setUintField(val, 32, structField) - case reflect.Uint64: - return setUintField(val, 64, structField) - case reflect.Bool: - return setBoolField(val, structField) - case reflect.Float32: - return setFloatField(val, 32, structField) - case reflect.Float64: - return setFloatField(val, 64, structField) - case reflect.String: - structField.SetString(val) - default: - return errors.New("unknown type") - } - return nil -} - -func setIntField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0" - } - intVal, err := strconv.ParseInt(value, 10, bitSize) - if err == nil { - field.SetInt(intVal) - } - return err -} - -func setUintField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0" - } - uintVal, err := strconv.ParseUint(value, 10, bitSize) - if err == nil { - field.SetUint(uintVal) - } - return err -} - -func setBoolField(value string, field reflect.Value) error { - if value == "" { - value = "false" - } - boolVal, err := strconv.ParseBool(value) - if err == nil { - field.SetBool(boolVal) - } - return err -} - -func setFloatField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0.0" - } - floatVal, err := strconv.ParseFloat(value, bitSize) - if err == nil { - field.SetFloat(floatVal) - } - return err -} - -// BindUnmarshaler type -type BindUnmarshaler interface { - // UnmarshalParam decodes and assigns a value from an form or query param. - UnmarshalParam(param string) error -} - -// bindUnmarshaler attempts to unmarshal a reflect.Value into a BindUnmarshaler -func bindUnmarshaler(field reflect.Value) (BindUnmarshaler, bool) { - ptr := reflect.New(field.Type()) - if ptr.CanInterface() { - iface := ptr.Interface() - if unmarshaler, ok := iface.(BindUnmarshaler); ok { - return unmarshaler, ok - } - } - return nil, false -} - -func unmarshalField(valueKind reflect.Kind, val string, field reflect.Value) (bool, error) { - switch valueKind { - case reflect.Ptr: - return unmarshalFieldPtr(val, field) - default: - return unmarshalFieldNonPtr(val, field) - } -} - -func unmarshalFieldNonPtr(value string, field reflect.Value) (bool, error) { - if unmarshaler, ok := bindUnmarshaler(field); ok { - err := unmarshaler.UnmarshalParam(value) - field.Set(reflect.ValueOf(unmarshaler).Elem()) - return true, err - } - return false, nil -} - -func unmarshalFieldPtr(value string, field reflect.Value) (bool, error) { - if field.IsNil() { - // Initialize the pointer to a nil value - field.Set(reflect.New(field.Type().Elem())) - } - return unmarshalFieldNonPtr(value, field.Elem()) -} diff --git a/vendor/code.vikunja.io/web/handler/read_all.go b/vendor/code.vikunja.io/web/handler/read_all.go index 24dc7e407ad..1fd5db78128 100644 --- a/vendor/code.vikunja.io/web/handler/read_all.go +++ b/vendor/code.vikunja.io/web/handler/read_all.go @@ -32,7 +32,7 @@ func (c *WebHandler) ReadAllWeb(ctx echo.Context) error { } // Get the object & bind params to struct - if err := ParamBinder(currentStruct, ctx); err != nil { + if err := ctx.Bind(currentStruct); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.") } diff --git a/vendor/code.vikunja.io/web/handler/read_one.go b/vendor/code.vikunja.io/web/handler/read_one.go index d46137037d4..6de14ec2459 100644 --- a/vendor/code.vikunja.io/web/handler/read_one.go +++ b/vendor/code.vikunja.io/web/handler/read_one.go @@ -26,7 +26,7 @@ func (c *WebHandler) ReadOneWeb(ctx echo.Context) error { currentStruct := c.EmptyStruct() // Get the object & bind params to struct - if err := ParamBinder(currentStruct, ctx); err != nil { + if err := ctx.Bind(currentStruct); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.") } diff --git a/vendor/code.vikunja.io/web/handler/update.go b/vendor/code.vikunja.io/web/handler/update.go index ef9834a1790..189fa12cca7 100644 --- a/vendor/code.vikunja.io/web/handler/update.go +++ b/vendor/code.vikunja.io/web/handler/update.go @@ -27,7 +27,7 @@ func (c *WebHandler) UpdateWeb(ctx echo.Context) error { currentStruct := c.EmptyStruct() // Get the object & bind params to struct - if err := ParamBinder(currentStruct, ctx); err != nil { + if err := ctx.Bind(currentStruct); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.") } diff --git a/vendor/modules.txt b/vendor/modules.txt index 1bbde82ea9e..922d4a09f8d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# code.vikunja.io/web v0.0.0-20190507193736-edb39812af9c +# code.vikunja.io/web v0.0.0-20190628071027-b5c16e24b0a7 code.vikunja.io/web code.vikunja.io/web/handler # github.com/BurntSushi/toml v0.3.1