summaryrefslogtreecommitdiffstats
path: root/bridge/api
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/api')
-rw-r--r--bridge/api/api.go28
1 files changed, 25 insertions, 3 deletions
diff --git a/bridge/api/api.go b/bridge/api/api.go
index c0bef0e2..cb348f16 100644
--- a/bridge/api/api.go
+++ b/bridge/api/api.go
@@ -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
}