4
0
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:
Wim
2023-03-11 23:10:41 +01:00
committed by GitHub
parent 0917e17383
commit c2b8e298d8
2 changed files with 26 additions and 4 deletions

View File

@ -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
}