diff options
Diffstat (limited to 'vendor/github.com/nlopes/slack/slack.go')
-rw-r--r-- | vendor/github.com/nlopes/slack/slack.go | 86 |
1 files changed, 39 insertions, 47 deletions
diff --git a/vendor/github.com/nlopes/slack/slack.go b/vendor/github.com/nlopes/slack/slack.go index 6d1e7de9..1e75142d 100644 --- a/vendor/github.com/nlopes/slack/slack.go +++ b/vendor/github.com/nlopes/slack/slack.go @@ -2,7 +2,6 @@ package slack import ( "context" - "errors" "fmt" "log" "net/http" @@ -10,31 +9,17 @@ import ( "os" ) -// Added as a var so that we can change this for testing purposes -var SLACK_API string = "https://slack.com/api/" -var SLACK_WEB_API_FORMAT string = "https://%s.slack.com/api/users.admin.%s?t=%s" +// APIURL a dded as a var so that we can change this for testing purposes +var APIURL = "https://slack.com/api/" -// HTTPClient sets a custom http.Client -// deprecated: in favor of SetHTTPClient() -var HTTPClient = &http.Client{} +// WEBAPIURLFormat ... +const WEBAPIURLFormat = "https://%s.slack.com/api/users.admin.%s?t=%d" -var customHTTPClient HTTPRequester = HTTPClient - -// 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 { +// httpClient defines the minimal interface needed for an http.Client to be implemented. +type httpClient interface { Do(*http.Request) (*http.Response, error) } -// 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 -} - // ResponseMetadata holds pagination metadata type ResponseMetadata struct { Cursor string `json:"next_cursor"` @@ -48,6 +33,7 @@ func (t *ResponseMetadata) initialize() *ResponseMetadata { return &ResponseMetadata{} } +// AuthTestResponse ... type AuthTestResponse struct { URL string `json:"url"` Team string `json:"team"` @@ -61,20 +47,36 @@ type authTestResponseFull struct { AuthTestResponse } +// Client for the slack api. type Client struct { token string info Info debug bool - httpclient HTTPRequester + log ilogger + httpclient httpClient } // Option defines an option for a Client type Option func(*Client) // OptionHTTPClient - provide a custom http client to the slack client. -func OptionHTTPClient(c HTTPRequester) func(*Client) { - return func(s *Client) { - s.httpclient = c +func OptionHTTPClient(client httpClient) func(*Client) { + return func(c *Client) { + c.httpclient = client + } +} + +// OptionDebug enable debugging for the client +func OptionDebug(b bool) func(*Client) { + return func(c *Client) { + c.debug = b + } +} + +// OptionLog set logging for client. +func OptionLog(l logger) func(*Client) { + return func(c *Client) { + c.log = internalLog{logger: l} } } @@ -82,7 +84,8 @@ func OptionHTTPClient(c HTTPRequester) func(*Client) { func New(token string, options ...Option) *Client { s := &Client{ token: token, - httpclient: customHTTPClient, + httpclient: &http.Client{}, + log: log.New(os.Stderr, "nlopes/slack", log.LstdFlags|log.Lshortfile), } for _, opt := range options { @@ -98,43 +101,32 @@ func (api *Client) AuthTest() (response *AuthTestResponse, error error) { } // AuthTestContext tests if the user is able to do authenticated requests or not with a custom context -func (api *Client) AuthTestContext(ctx context.Context) (response *AuthTestResponse, error error) { +func (api *Client) AuthTestContext(ctx context.Context) (response *AuthTestResponse, err error) { api.Debugf("Challenging auth...") responseFull := &authTestResponseFull{} - err := postSlackMethod(ctx, api.httpclient, "auth.test", url.Values{"token": {api.token}}, responseFull, api.debug) + err = postSlackMethod(ctx, api.httpclient, "auth.test", url.Values{"token": {api.token}}, responseFull, api) if err != nil { - api.Debugf("failed to test for auth: %s", err) return nil, err } - if !responseFull.Ok { - api.Debugf("auth response was not Ok: %s", responseFull.Error) - return nil, errors.New(responseFull.Error) - } - api.Debugf("Auth challenge was successful with response %+v", responseFull.AuthTestResponse) - return &responseFull.AuthTestResponse, nil -} - -// SetDebug switches the api into debug mode -// When in debug mode, it logs various info about what its doing -// If you ever use this in production, don't call SetDebug(true) -func (api *Client) SetDebug(debug bool) { - api.debug = debug - if debug && logger == nil { - SetLogger(log.New(os.Stdout, "nlopes/slack", log.LstdFlags|log.Lshortfile)) - } + return &responseFull.AuthTestResponse, responseFull.Err() } // Debugf print a formatted debug line. func (api *Client) Debugf(format string, v ...interface{}) { if api.debug { - logger.Output(2, fmt.Sprintf(format, v...)) + api.log.Output(2, fmt.Sprintf(format, v...)) } } // Debugln print a debug line. func (api *Client) Debugln(v ...interface{}) { if api.debug { - logger.Output(2, fmt.Sprintln(v...)) + api.log.Output(2, fmt.Sprintln(v...)) } } + +// Debug returns if debug is enabled. +func (api *Client) Debug() bool { + return api.debug +} |