summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/slack/misc.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/matterbridge/slack/misc.go')
-rw-r--r--vendor/github.com/matterbridge/slack/misc.go183
1 files changed, 0 insertions, 183 deletions
diff --git a/vendor/github.com/matterbridge/slack/misc.go b/vendor/github.com/matterbridge/slack/misc.go
deleted file mode 100644
index 3a9ed2d6..00000000
--- a/vendor/github.com/matterbridge/slack/misc.go
+++ /dev/null
@@ -1,183 +0,0 @@
-package slack
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
- "net/http/httputil"
- "net/url"
- "os"
- "path/filepath"
- "strings"
- "time"
-)
-
-// HTTPRequester defines the minimal interface needed for an http.Client to be implemented.
-//
-// Use it in conjunction with the SetHTTPClient function to allow for other capabilities
-// like a tracing http.Client
-type HTTPRequester interface {
- Do(*http.Request) (*http.Response, error)
-}
-
-var customHTTPClient HTTPRequester
-
-// HTTPClient sets a custom http.Client
-// deprecated: in favor of SetHTTPClient()
-var HTTPClient = &http.Client{}
-
-type WebResponse struct {
- Ok bool `json:"ok"`
- Error *WebError `json:"error"`
-}
-
-type WebError string
-
-func (s WebError) Error() string {
- return string(s)
-}
-
-func fileUploadReq(ctx context.Context, path, fieldname, filename string, values url.Values, r io.Reader) (*http.Request, error) {
- body := &bytes.Buffer{}
- wr := multipart.NewWriter(body)
-
- ioWriter, err := wr.CreateFormFile(fieldname, filename)
- if err != nil {
- wr.Close()
- return nil, err
- }
- _, err = io.Copy(ioWriter, r)
- if err != nil {
- wr.Close()
- return nil, err
- }
- // Close the multipart writer or the footer won't be written
- wr.Close()
- req, err := http.NewRequest("POST", path, body)
- req = req.WithContext(ctx)
- if err != nil {
- return nil, err
- }
- req.Header.Add("Content-Type", wr.FormDataContentType())
- req.URL.RawQuery = (values).Encode()
- return req, nil
-}
-
-func parseResponseBody(body io.ReadCloser, intf *interface{}, debug bool) error {
- response, err := ioutil.ReadAll(body)
- if err != nil {
- return err
- }
-
- // FIXME: will be api.Debugf
- if debug {
- logger.Printf("parseResponseBody: %s\n", string(response))
- }
-
- err = json.Unmarshal(response, &intf)
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func postLocalWithMultipartResponse(ctx context.Context, path, fpath, fieldname string, values url.Values, intf interface{}, debug bool) error {
- fullpath, err := filepath.Abs(fpath)
- if err != nil {
- return err
- }
- file, err := os.Open(fullpath)
- if err != nil {
- return err
- }
- defer file.Close()
- return postWithMultipartResponse(ctx, path, filepath.Base(fpath), fieldname, values, file, intf, debug)
-}
-
-func postWithMultipartResponse(ctx context.Context, path, name, fieldname string, values url.Values, r io.Reader, intf interface{}, debug bool) error {
- req, err := fileUploadReq(ctx, SLACK_API+path, fieldname, name, values, r)
- if err != nil {
- return err
- }
- req = req.WithContext(ctx)
- resp, err := getHTTPClient().Do(req)
- if err != nil {
- return err
- }
- defer resp.Body.Close()
-
- // Slack seems to send an HTML body along with 5xx error codes. Don't parse it.
- if resp.StatusCode != 200 {
- logResponse(resp, debug)
- return fmt.Errorf("Slack server error: %s.", resp.Status)
- }
-
- return parseResponseBody(resp.Body, &intf, debug)
-}
-
-func postForm(ctx context.Context, endpoint string, values url.Values, intf interface{}, debug bool) error {
- reqBody := strings.NewReader(values.Encode())
- req, err := http.NewRequest("POST", endpoint, reqBody)
- if err != nil {
- return err
- }
- req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-
- req = req.WithContext(ctx)
- resp, err := getHTTPClient().Do(req)
- if err != nil {
- return err
- }
- defer resp.Body.Close()
-
- // Slack seems to send an HTML body along with 5xx error codes. Don't parse it.
- if resp.StatusCode != 200 {
- logResponse(resp, debug)
- return fmt.Errorf("Slack server error: %s.", resp.Status)
- }
-
- return parseResponseBody(resp.Body, &intf, debug)
-}
-
-func post(ctx context.Context, path string, values url.Values, intf interface{}, debug bool) error {
- return postForm(ctx, SLACK_API+path, values, intf, debug)
-}
-
-func parseAdminResponse(ctx context.Context, method string, teamName string, values url.Values, intf interface{}, debug bool) error {
- endpoint := fmt.Sprintf(SLACK_WEB_API_FORMAT, teamName, method, time.Now().Unix())
- return postForm(ctx, endpoint, values, intf, debug)
-}
-
-func logResponse(resp *http.Response, debug bool) error {
- if debug {
- text, err := httputil.DumpResponse(resp, true)
- if err != nil {
- return err
- }
-
- logger.Print(string(text))
- }
-
- return nil
-}
-
-func getHTTPClient() HTTPRequester {
- if customHTTPClient != nil {
- return customHTTPClient
- }
-
- return HTTPClient
-}
-
-// SetHTTPClient allows you to specify a custom http.Client
-// Use this instead of the package level HTTPClient variable if you want to use a custom client like the
-// Stackdriver Trace HTTPClient https://godoc.org/cloud.google.com/go/trace#HTTPClient
-func SetHTTPClient(client HTTPRequester) {
- customHTTPClient = client
-}