diff options
Diffstat (limited to 'vendor/github.com/nlopes/slack/slack.go')
-rw-r--r-- | vendor/github.com/nlopes/slack/slack.go | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/vendor/github.com/nlopes/slack/slack.go b/vendor/github.com/nlopes/slack/slack.go new file mode 100644 index 00000000..754117c1 --- /dev/null +++ b/vendor/github.com/nlopes/slack/slack.go @@ -0,0 +1,114 @@ +package slack + +import ( + "context" + "errors" + "fmt" + "log" + "net/url" + "os" +) + +var logger stdLogger // A logger that can be set by consumers +/* + 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" + +type SlackResponse struct { + Ok bool `json:"ok"` + Error string `json:"error"` +} + +type AuthTestResponse struct { + URL string `json:"url"` + Team string `json:"team"` + User string `json:"user"` + TeamID string `json:"team_id"` + UserID string `json:"user_id"` +} + +type authTestResponseFull struct { + SlackResponse + AuthTestResponse +} + +type Client struct { + config struct { + token string + } + info Info + debug bool +} + +// stdLogger is a logger interface compatible with both stdlib and some +// 3rd party loggers such as logrus. +type stdLogger interface { + Print(...interface{}) + Printf(string, ...interface{}) + Println(...interface{}) + + Fatal(...interface{}) + Fatalf(string, ...interface{}) + Fatalln(...interface{}) + + Panic(...interface{}) + Panicf(string, ...interface{}) + Panicln(...interface{}) + + Output(int, string) error +} + +// SetLogger let's library users supply a logger, so that api debugging +// can be logged along with the application's debugging info. +func SetLogger(l stdLogger) { + logger = l +} + +// New creates new Client. +func New(token string) *Client { + s := &Client{} + s.config.token = token + return s +} + +// AuthTest tests if the user is able to do authenticated requests or not +func (api *Client) AuthTest() (response *AuthTestResponse, error error) { + return api.AuthTestContext(context.Background()) +} + +// 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) { + responseFull := &authTestResponseFull{} + err := post(ctx, "auth.test", url.Values{"token": {api.config.token}}, responseFull, api.debug) + if err != nil { + return nil, err + } + if !responseFull.Ok { + return nil, errors.New(responseFull.Error) + } + 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 { + logger = log.New(os.Stdout, "nlopes/slack", log.LstdFlags|log.Lshortfile) + } +} + +func (api *Client) Debugf(format string, v ...interface{}) { + if api.debug { + logger.Output(2, fmt.Sprintf(format, v...)) + } +} + +func (api *Client) Debugln(v ...interface{}) { + if api.debug { + logger.Output(2, fmt.Sprintln(v...)) + } +} |