diff options
Diffstat (limited to 'model/utils.go')
-rw-r--r-- | model/utils.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/model/utils.go b/model/utils.go index a9c441fee..4ebd23939 100644 --- a/model/utils.go +++ b/model/utils.go @@ -10,6 +10,7 @@ import ( "encoding/json" "fmt" "io" + "io/ioutil" "net/mail" "net/url" "regexp" @@ -74,13 +75,21 @@ func (er *AppError) ToJson() string { // AppErrorFromJson will decode the input and return an AppError func AppErrorFromJson(data io.Reader) *AppError { - decoder := json.NewDecoder(data) + str := "" + bytes, rerr := ioutil.ReadAll(data) + if rerr != nil { + str = rerr.Error() + } else { + str = string(bytes) + } + + decoder := json.NewDecoder(strings.NewReader(str)) var er AppError err := decoder.Decode(&er) if err == nil { return &er } else { - return NewLocAppError("AppErrorFromJson", "model.utils.decode_json.app_error", nil, err.Error()) + return NewLocAppError("AppErrorFromJson", "model.utils.decode_json.app_error", nil, "body: "+str) } } @@ -166,6 +175,23 @@ func ArrayFromJson(data io.Reader) []string { } } +func ArrayFromInterface(data interface{}) []string { + stringArray := []string{} + + dataArray, ok := data.([]interface{}) + if !ok { + return stringArray + } + + for _, v := range dataArray { + if str, ok := v.(string); ok { + stringArray = append(stringArray, str) + } + } + + return stringArray +} + func StringInterfaceToJson(objmap map[string]interface{}) string { if b, err := json.Marshal(objmap); err != nil { return "" |