mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-06-26 01:49:22 +00:00
Add extra error checking for fileinfo (api) (#2015)
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@ -139,12 +140,33 @@ func (b *API) handlePostMessage(c echo.Context) error {
|
||||
message.Account = b.Account
|
||||
message.ID = ""
|
||||
message.Timestamp = time.Now()
|
||||
|
||||
var (
|
||||
fm map[string]interface{}
|
||||
ds string
|
||||
ok bool
|
||||
)
|
||||
|
||||
for i, f := range message.Extra["file"] {
|
||||
fi := config.FileInfo{}
|
||||
mapstructure.Decode(f.(map[string]interface{}), &fi)
|
||||
var data []byte
|
||||
if fm, ok = f.(map[string]interface{}); !ok {
|
||||
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
|
||||
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
|
||||
message.Extra["file"][i] = fi
|
||||
}
|
||||
|
Reference in New Issue
Block a user