Add extra error checking for fileinfo (api) (#2015)

This commit is contained in:
Wim 2023-03-11 23:10:41 +01:00 committed by GitHub
parent 0917e17383
commit c2b8e298d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

View File

@ -4,6 +4,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"net/http" "net/http"
"strings"
"sync" "sync"
"time" "time"
@ -139,12 +140,33 @@ func (b *API) handlePostMessage(c echo.Context) error {
message.Account = b.Account message.Account = b.Account
message.ID = "" message.ID = ""
message.Timestamp = time.Now() message.Timestamp = time.Now()
var (
fm map[string]interface{}
ds string
ok bool
)
for i, f := range message.Extra["file"] { for i, f := range message.Extra["file"] {
fi := config.FileInfo{} fi := config.FileInfo{}
mapstructure.Decode(f.(map[string]interface{}), &fi) if fm, ok = f.(map[string]interface{}); !ok {
var data []byte return echo.NewHTTPError(http.StatusInternalServerError, "invalid format for extra")
}
err := mapstructure.Decode(fm, &fi)
if err != nil {
if !strings.Contains(err.Error(), "got string") {
return err
}
}
// mapstructure doesn't decode base64 into []byte, so it must be done manually for fi.Data // mapstructure doesn't decode base64 into []byte, so it must be done manually for fi.Data
data, _ = base64.StdEncoding.DecodeString(f.(map[string]interface{})["Data"].(string)) if ds, ok = fm["Data"].(string); !ok {
return echo.NewHTTPError(http.StatusInternalServerError, "invalid format for data")
}
data, err := base64.StdEncoding.DecodeString(ds)
if err != nil {
return err
}
fi.Data = &data fi.Data = &data
message.Extra["file"][i] = fi message.Extra["file"][i] = fi
} }

2
go.mod
View File

@ -33,6 +33,7 @@ require (
github.com/mattermost/mattermost-server/v6 v6.7.2 github.com/mattermost/mattermost-server/v6 v6.7.2
github.com/mattn/godown v0.0.1 github.com/mattn/godown v0.0.1
github.com/mdp/qrterminal v1.0.1 github.com/mdp/qrterminal v1.0.1
github.com/mitchellh/mapstructure v1.5.0
github.com/nelsonken/gomf v0.0.0-20190423072027-c65cc0469e94 github.com/nelsonken/gomf v0.0.0-20190423072027-c65cc0469e94
github.com/olahol/melody v1.1.2 github.com/olahol/melody v1.1.2
github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c
@ -96,7 +97,6 @@ require (
github.com/minio/minio-go/v7 v7.0.24 // indirect github.com/minio/minio-go/v7 v7.0.24 // indirect
github.com/minio/sha256-simd v1.0.0 // indirect github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monaco-io/request v1.0.5 // indirect github.com/monaco-io/request v1.0.5 // indirect