mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-08-11 18:08:08 +00:00
Fix error handling on bad event queue id (zulip). Closes #694
This commit is contained in:
52
vendor/github.com/matterbridge/gozulipbot/queue.go
generated
vendored
52
vendor/github.com/matterbridge/gozulipbot/queue.go
generated
vendored
@@ -13,10 +13,11 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
HeartbeatError = fmt.Errorf("EventMessage is a heartbeat")
|
||||
UnauthorizedError = fmt.Errorf("Request is unauthorized")
|
||||
BackoffError = fmt.Errorf("Too many requests")
|
||||
UnknownError = fmt.Errorf("Error was unknown")
|
||||
HeartbeatError = fmt.Errorf("EventMessage is a heartbeat")
|
||||
UnauthorizedError = fmt.Errorf("Request is unauthorized")
|
||||
BackoffError = fmt.Errorf("Too many requests")
|
||||
BadEventQueueError = fmt.Errorf("BAD_EVENT_QUEUE_ID error")
|
||||
UnknownError = fmt.Errorf("Error was unknown")
|
||||
)
|
||||
|
||||
type Queue struct {
|
||||
@@ -26,6 +27,13 @@ type Queue struct {
|
||||
Bot *Bot `json:"-"`
|
||||
}
|
||||
|
||||
type QueueError struct {
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
ID string `json:"queue_id"`
|
||||
Result string `json:"result"`
|
||||
}
|
||||
|
||||
func (q *Queue) EventsChan() (chan EventMessage, func()) {
|
||||
end := false
|
||||
endFunc := func() {
|
||||
@@ -131,18 +139,22 @@ func (q *Queue) GetEvents() ([]EventMessage, error) {
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch {
|
||||
case resp.StatusCode == 429:
|
||||
return nil, BackoffError
|
||||
case resp.StatusCode == 403:
|
||||
return nil, UnauthorizedError
|
||||
case resp.StatusCode >= 400:
|
||||
return nil, UnknownError
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
qErr, err := q.ParseError(body)
|
||||
if err != nil || qErr == nil {
|
||||
return nil, UnknownError
|
||||
}
|
||||
return nil, BadEventQueueError
|
||||
}
|
||||
|
||||
msgs, err := q.ParseEventMessages(body)
|
||||
@@ -170,6 +182,26 @@ func (q *Queue) RawGetEvents() (*http.Response, error) {
|
||||
return q.Bot.Client.Do(req)
|
||||
}
|
||||
|
||||
func (q *Queue) ParseError(rawEventResponse []byte) (*QueueError, error) {
|
||||
rawResponse := map[string]json.RawMessage{}
|
||||
err := json.Unmarshal(rawEventResponse, &rawResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if _, ok := rawResponse["code"]; ok {
|
||||
var qErr QueueError
|
||||
err = json.Unmarshal(rawEventResponse, &qErr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if qErr.Code == "BAD_EVENT_QUEUE_ID" {
|
||||
return &qErr, nil
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (q *Queue) ParseEventMessages(rawEventResponse []byte) ([]EventMessage, error) {
|
||||
rawResponse := map[string]json.RawMessage{}
|
||||
err := json.Unmarshal(rawEventResponse, &rawResponse)
|
||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@@ -70,7 +70,7 @@ github.com/magiconair/properties
|
||||
github.com/matterbridge/go-xmpp
|
||||
# github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea
|
||||
github.com/matterbridge/gomatrix
|
||||
# github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544
|
||||
# github.com/matterbridge/gozulipbot v0.0.0-20190211002717-befe50663a92
|
||||
github.com/matterbridge/gozulipbot
|
||||
# github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
|
||||
github.com/matterbridge/logrus-prefixed-formatter
|
||||
|
Reference in New Issue
Block a user