diff options
Diffstat (limited to 'utils/inbucket.go')
-rw-r--r-- | utils/inbucket.go | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/utils/inbucket.go b/utils/inbucket.go deleted file mode 100644 index 5c40d5757..000000000 --- a/utils/inbucket.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -package utils - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "strings" - "time" -) - -const ( - INBUCKET_API = "/api/v1/mailbox/" -) - -// OutputJSONHeader holds the received Header to test sending emails (inbucket) -type JSONMessageHeaderInbucket []struct { - Mailbox string - ID string `json:"Id"` - From, Subject, Date string - To []string - Size int -} - -// OutputJSONMessage holds the received Message fto test sending emails (inbucket) -type JSONMessageInbucket struct { - Mailbox string - ID string `json:"Id"` - From, Subject, Date string - Size int - Header map[string][]string - Body struct { - Text string - HTML string `json:"Html"` - } - Attachments []struct { - Filename string - ContentType string `json:"content-type"` - DownloadLink string `json:"download-link"` - Bytes []byte `json:"-"` - } -} - -func ParseEmail(email string) string { - pos := strings.Index(email, "@") - parsedEmail := email[0:pos] - return parsedEmail -} - -func GetMailBox(email string) (results JSONMessageHeaderInbucket, err error) { - - parsedEmail := ParseEmail(email) - - url := fmt.Sprintf("%s%s%s", getInbucketHost(), INBUCKET_API, parsedEmail) - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - - client := &http.Client{} - - resp, err := client.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - if resp.Body == nil { - return nil, fmt.Errorf("No Mailbox") - } - - var record JSONMessageHeaderInbucket - 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 -} - -func GetMessageFromMailbox(email, id string) (results JSONMessageInbucket, err error) { - - parsedEmail := ParseEmail(email) - - var record JSONMessageInbucket - - url := fmt.Sprintf("%s%s%s/%s", getInbucketHost(), INBUCKET_API, parsedEmail, id) - emailResponse, err := get(url) - if err != nil { - return record, err - } - defer emailResponse.Body.Close() - - err = json.NewDecoder(emailResponse.Body).Decode(&record) - - // download attachments - if record.Attachments != nil && len(record.Attachments) > 0 { - for i := range record.Attachments { - if bytes, err := downloadAttachment(record.Attachments[i].DownloadLink); err != nil { - return record, err - } else { - record.Attachments[i].Bytes = make([]byte, len(bytes)) - copy(record.Attachments[i].Bytes, bytes) - } - } - } - - return record, err -} - -func downloadAttachment(url string) ([]byte, error) { - attachmentResponse, err := get(url) - if err != nil { - return nil, err - } - defer attachmentResponse.Body.Close() - - buf := new(bytes.Buffer) - io.Copy(buf, attachmentResponse.Body) - return buf.Bytes(), nil -} - -func get(url string) (*http.Response, error) { - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - return nil, err - } - - return resp, nil -} - -func DeleteMailBox(email string) (err error) { - - parsedEmail := ParseEmail(email) - - url := fmt.Sprintf("%s%s%s", getInbucketHost(), INBUCKET_API, parsedEmail) - req, err := http.NewRequest("DELETE", url, nil) - if err != nil { - return err - } - - client := &http.Client{} - - resp, err := client.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - 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) -} - -func getInbucketHost() (host string) { - - inbucket_host := os.Getenv("CI_HOST") - if inbucket_host == "" { - inbucket_host = "dockerhost" - } - - inbucket_port := os.Getenv("CI_INBUCKET_PORT") - if inbucket_port == "" { - inbucket_port = "9000" - } - return fmt.Sprintf("http://%s:%s", inbucket_host, inbucket_port) -} |