diff options
Diffstat (limited to 'utils/inbucket.go')
-rw-r--r-- | utils/inbucket.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/utils/inbucket.go b/utils/inbucket.go index 1c747cee8..f80d16efd 100644 --- a/utils/inbucket.go +++ b/utils/inbucket.go @@ -3,8 +3,10 @@ package utils import ( "encoding/json" "fmt" + "io" "net/http" "strings" + "time" ) const ( @@ -58,11 +60,22 @@ func GetMailBox(email string) (results JSONMessageHeaderInbucket, err error) { } defer resp.Body.Close() + if resp.Body == nil { + return nil, fmt.Errorf("No Mailbox") + } + var record JSONMessageHeaderInbucket - if err := json.NewDecoder(resp.Body).Decode(&record); err != nil { - fmt.Println(err) - return nil, err + err = json.NewDecoder(resp.Body).Decode(&record) + switch { + case err == io.EOF: + return nil, fmt.Errorf("Error: %s", err) + case err != nil: + return nil, fmt.Errorf("Error: %s", err) + } + if len(record) == 0 { + return nil, fmt.Errorf("No mailbox") } + return record, nil } @@ -87,7 +100,6 @@ func GetMessageFromMailbox(email, id string) (results JSONMessageInbucket, err e defer resp.Body.Close() if err := json.NewDecoder(resp.Body).Decode(&record); err != nil { - fmt.Println(err) return record, err } return record, nil @@ -113,3 +125,21 @@ func DeleteMailBox(email string) (err error) { return nil } + +func RetryInbucket(attempts int, callback func() error) (err error) { + for i := 0; ; i++ { + err = callback() + if err == nil { + return nil + } + + if i >= (attempts - 1) { + break + } + + time.Sleep(5 * time.Second) + + fmt.Println("retrying...") + } + return fmt.Errorf("After %d attempts, last error: %s", attempts, err) +} |