Added validation and error checking for incoming updates in ListenForWebhook

bot-api-6.1
Dmitriy Kharchenko 2019-11-24 11:05:38 +03:00
parent b33efeebc7
commit 7629a37f77
2 changed files with 25 additions and 3 deletions

26
bot.go
View File

@ -533,11 +533,33 @@ func (bot *BotAPI) ListenForWebhook(pattern string) UpdatesChannel {
ch := make(chan Update, bot.Buffer)
http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
bytes, _ := ioutil.ReadAll(r.Body)
if r.Method != http.MethodPost {
errMsg, _ := json.Marshal(map[string]string{"error": "Wrong HTTP method, required POST"})
w.WriteHeader(http.StatusMethodNotAllowed)
w.Header().Set("Content-Type", "application/json")
w.Write(errMsg)
return
}
bytes, err := ioutil.ReadAll(r.Body)
if err != nil {
errMsg, _ := json.Marshal(map[string]string{"error": err.Error()})
w.WriteHeader(http.StatusBadRequest)
w.Header().Set("Content-Type", "application/json")
w.Write(errMsg)
return
}
r.Body.Close()
var update Update
json.Unmarshal(bytes, &update)
err = json.Unmarshal(bytes, &update)
if err != nil {
errMsg, _ := json.Marshal(map[string]string{"error": err.Error()})
w.WriteHeader(http.StatusBadRequest)
w.Header().Set("Content-Type", "application/json")
w.Write(errMsg)
return
}
ch <- update
})