From 0389f449ad7250e769ad2b0dd67cb31af57133a2 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 14 Feb 2022 13:55:06 +0900 Subject: [PATCH 1/6] all: support pass context.Context to all methods Signed-off-by: Koichi Shiraishi --- apps.go | 6 +++- chat.go | 54 +++++++++++++---------------------- files.go | 79 +++++++++++++++++++++++++++++----------------------- info.go | 6 +++- misc.go | 4 +-- reminders.go | 36 +++++++++++++++++++++--- webhooks.go | 4 +++ 7 files changed, 112 insertions(+), 77 deletions(-) diff --git a/apps.go b/apps.go index 4f60da0aa..10d429752 100644 --- a/apps.go +++ b/apps.go @@ -44,6 +44,10 @@ func (api *Client) ListEventAuthorizationsContext(ctx context.Context, eventCont } func (api *Client) UninstallApp(clientID, clientSecret string) error { + return api.UninstallAppContext(context.Background(), clientID, clientSecret) +} + +func (api *Client) UninstallAppContext(ctx context.Context, clientID, clientSecret string) error { values := url.Values{ "client_id": {clientID}, "client_secret": {clientSecret}, @@ -51,7 +55,7 @@ func (api *Client) UninstallApp(clientID, clientSecret string) error { response := SlackResponse{} - err := api.getMethod(context.Background(), "apps.uninstall", api.token, values, &response) + err := api.getMethod(ctx, "apps.uninstall", api.token, values, &response) if err != nil { return err } diff --git a/chat.go b/chat.go index 493b65b67..47f96ca40 100644 --- a/chat.go +++ b/chat.go @@ -86,12 +86,7 @@ func NewPostMessageParameters() PostMessageParameters { // DeleteMessage deletes a message in a channel func (api *Client) DeleteMessage(channel, messageTimestamp string) (string, string, error) { - respChannel, respTimestamp, _, err := api.SendMessageContext( - context.Background(), - channel, - MsgOptionDelete(messageTimestamp), - ) - return respChannel, respTimestamp, err + return api.DeleteMessageContext(context.Background(), channel, messageTimestamp) } // DeleteMessageContext deletes a message in a channel with a custom context @@ -108,8 +103,15 @@ func (api *Client) DeleteMessageContext(ctx context.Context, channel, messageTim // Message is escaped by default according to https://api.slack.com/docs/formatting // Use http://davestevens.github.io/slack-message-builder/ to help crafting your message. func (api *Client) ScheduleMessage(channelID, postAt string, options ...MsgOption) (string, string, error) { + return api.ScheduleMessageContext(context.Background(), channelID, postAt, options...) +} + +// ScheduleMessageContext sends a message to a channel with a custom context +// +// For more details, see ScheduleMessage documentation. +func (api *Client) ScheduleMessageContext(ctx context.Context, channelID, postAt string, options ...MsgOption) (string, string, error) { respChannel, respTimestamp, _, err := api.SendMessageContext( - context.Background(), + ctx, channelID, MsgOptionSchedule(postAt), MsgOptionCompose(options...), @@ -121,13 +123,7 @@ func (api *Client) ScheduleMessage(channelID, postAt string, options ...MsgOptio // Message is escaped by default according to https://api.slack.com/docs/formatting // Use http://davestevens.github.io/slack-message-builder/ to help crafting your message. func (api *Client) PostMessage(channelID string, options ...MsgOption) (string, string, error) { - respChannel, respTimestamp, _, err := api.SendMessageContext( - context.Background(), - channelID, - MsgOptionPost(), - MsgOptionCompose(options...), - ) - return respChannel, respTimestamp, err + return api.PostMessageContext(context.Background(), channelID, options...) } // PostMessageContext sends a message to a channel with a custom context @@ -146,12 +142,7 @@ func (api *Client) PostMessageContext(ctx context.Context, channelID string, opt // Message is escaped by default according to https://api.slack.com/docs/formatting // Use http://davestevens.github.io/slack-message-builder/ to help crafting your message. func (api *Client) PostEphemeral(channelID, userID string, options ...MsgOption) (string, error) { - return api.PostEphemeralContext( - context.Background(), - channelID, - userID, - options..., - ) + return api.PostEphemeralContext(context.Background(), channelID, userID, options...) } // PostEphemeralContext sends an ephemeal message to a user in a channel with a custom context @@ -168,12 +159,7 @@ func (api *Client) PostEphemeralContext(ctx context.Context, channelID, userID s // UpdateMessage updates a message in a channel func (api *Client) UpdateMessage(channelID, timestamp string, options ...MsgOption) (string, string, string, error) { - return api.SendMessageContext( - context.Background(), - channelID, - MsgOptionUpdate(timestamp), - MsgOptionCompose(options...), - ) + return api.UpdateMessageContext(context.Background(), channelID, timestamp, options...) } // UpdateMessageContext updates a message in a channel @@ -225,7 +211,7 @@ func (api *Client) SendMessageContext(ctx context.Context, channelID string, opt response chatResponseFull ) - if req, parser, err = buildSender(api.endpoint, options...).BuildRequest(api.token, channelID); err != nil { + if req, parser, err = buildSender(api.endpoint, options...).BuildRequest(ctx, api.token, channelID); err != nil { return "", "", "", err } @@ -305,7 +291,7 @@ type sendConfig struct { deleteOriginal bool } -func (t sendConfig) BuildRequest(token, channelID string) (req *http.Request, _ func(*chatResponseFull) responseParser, err error) { +func (t sendConfig) BuildRequest(ctx context.Context, token, channelID string) (req *http.Request, _ func(*chatResponseFull) responseParser, err error) { if t, err = applyMsgOptions(token, channelID, t.apiurl, t.options...); err != nil { return nil, nil, err } @@ -320,9 +306,9 @@ func (t sendConfig) BuildRequest(token, channelID string) (req *http.Request, _ responseType: t.responseType, replaceOriginal: t.replaceOriginal, deleteOriginal: t.deleteOriginal, - }.BuildRequest() + }.BuildRequest(ctx) default: - return formSender{endpoint: t.endpoint, values: t.values}.BuildRequest() + return formSender{endpoint: t.endpoint, values: t.values}.BuildRequest(ctx) } } @@ -331,8 +317,8 @@ type formSender struct { values url.Values } -func (t formSender) BuildRequest() (*http.Request, func(*chatResponseFull) responseParser, error) { - req, err := formReq(t.endpoint, t.values) +func (t formSender) BuildRequest(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { + req, err := formReq(ctx, t.endpoint, t.values) return req, func(resp *chatResponseFull) responseParser { return newJSONParser(resp) }, err @@ -348,8 +334,8 @@ type responseURLSender struct { deleteOriginal bool } -func (t responseURLSender) BuildRequest() (*http.Request, func(*chatResponseFull) responseParser, error) { - req, err := jsonReq(t.endpoint, Msg{ +func (t responseURLSender) BuildRequest(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { + req, err := jsonReq(ctx, t.endpoint, Msg{ Text: t.values.Get("text"), Timestamp: t.values.Get("ts"), Attachments: t.attachments, diff --git a/files.go b/files.go index 00c255bc4..e7e71c495 100644 --- a/files.go +++ b/files.go @@ -202,7 +202,14 @@ func (api *Client) GetFileInfoContext(ctx context.Context, fileID string, count, // GetFile retreives a given file from its private download URL func (api *Client) GetFile(downloadURL string, writer io.Writer) error { - return downloadFile(api.httpclient, api.token, downloadURL, writer, api) + return api.GetFileContext(context.Background(), downloadURL, writer) +} + +// GetFileContext retreives a given file from its private download URL with a custom context +// +// For more details, see GetFile documentation. +func (api *Client) GetFileContext(ctx context.Context, downloadURL string, writer io.Writer) error { + return downloadFile(ctx, api.httpclient, api.token, downloadURL, writer, api) } // GetFiles retrieves all files according to the parameters given @@ -210,40 +217,6 @@ func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error) return api.GetFilesContext(context.Background(), params) } -// ListFiles retrieves all files according to the parameters given. Uses cursor based pagination. -func (api *Client) ListFiles(params ListFilesParameters) ([]File, *ListFilesParameters, error) { - return api.ListFilesContext(context.Background(), params) -} - -// ListFilesContext retrieves all files according to the parameters given with a custom context. Uses cursor based pagination. -func (api *Client) ListFilesContext(ctx context.Context, params ListFilesParameters) ([]File, *ListFilesParameters, error) { - values := url.Values{ - "token": {api.token}, - } - - if params.User != DEFAULT_FILES_USER { - values.Add("user", params.User) - } - if params.Channel != DEFAULT_FILES_CHANNEL { - values.Add("channel", params.Channel) - } - if params.Limit != DEFAULT_FILES_COUNT { - values.Add("limit", strconv.Itoa(params.Limit)) - } - if params.Cursor != "" { - values.Add("cursor", params.Cursor) - } - - response, err := api.fileRequest(ctx, "files.list", values) - if err != nil { - return nil, nil, err - } - - params.Cursor = response.Metadata.Cursor - - return response.Files, ¶ms, nil -} - // GetFilesContext retrieves all files according to the parameters given with a custom context func (api *Client) GetFilesContext(ctx context.Context, params GetFilesParameters) ([]File, *Paging, error) { values := url.Values{ @@ -281,6 +254,42 @@ func (api *Client) GetFilesContext(ctx context.Context, params GetFilesParameter return response.Files, &response.Paging, nil } +// ListFiles retrieves all files according to the parameters given. Uses cursor based pagination. +func (api *Client) ListFiles(params ListFilesParameters) ([]File, *ListFilesParameters, error) { + return api.ListFilesContext(context.Background(), params) +} + +// ListFilesContext retrieves all files according to the parameters given with a custom context. +// +// For more details, see ListFiles documentation. +func (api *Client) ListFilesContext(ctx context.Context, params ListFilesParameters) ([]File, *ListFilesParameters, error) { + values := url.Values{ + "token": {api.token}, + } + + if params.User != DEFAULT_FILES_USER { + values.Add("user", params.User) + } + if params.Channel != DEFAULT_FILES_CHANNEL { + values.Add("channel", params.Channel) + } + if params.Limit != DEFAULT_FILES_COUNT { + values.Add("limit", strconv.Itoa(params.Limit)) + } + if params.Cursor != "" { + values.Add("cursor", params.Cursor) + } + + response, err := api.fileRequest(ctx, "files.list", values) + if err != nil { + return nil, nil, err + } + + params.Cursor = response.Metadata.Cursor + + return response.Files, ¶ms, nil +} + // UploadFile uploads a file func (api *Client) UploadFile(params FileUploadParameters) (file *File, err error) { return api.UploadFileContext(context.Background(), params) diff --git a/info.go b/info.go index 16fa667bd..fde2bc98e 100644 --- a/info.go +++ b/info.go @@ -321,9 +321,13 @@ type UserPrefs struct { } func (api *Client) GetUserPrefs() (*UserPrefsCarrier, error) { + return api.GetUserPrefsContext(context.Background()) +} + +func (api *Client) GetUserPrefsContext(ctx context.Context) (*UserPrefsCarrier, error) { response := UserPrefsCarrier{} - err := api.getMethod(context.Background(), "users.prefs.get", api.token, url.Values{}, &response) + err := api.getMethod(ctx, "users.prefs.get", api.token, url.Values{}, &response) if err != nil { return nil, err } diff --git a/misc.go b/misc.go index 5272e7c4b..fc2927461 100644 --- a/misc.go +++ b/misc.go @@ -76,7 +76,7 @@ func fileUploadReq(ctx context.Context, path string, values url.Values, r io.Rea return req, nil } -func downloadFile(client httpClient, token string, downloadURL string, writer io.Writer, d Debug) error { +func downloadFile(ctx context.Context, client httpClient, token string, downloadURL string, writer io.Writer, d Debug) error { if downloadURL == "" { return fmt.Errorf("received empty download URL") } @@ -88,7 +88,7 @@ func downloadFile(client httpClient, token string, downloadURL string, writer io var bearer = "Bearer " + token req.Header.Add("Authorization", bearer) - req.WithContext(context.Background()) + req.WithContext(ctx) resp, err := client.Do(req) if err != nil { diff --git a/reminders.go b/reminders.go index ae1da8669..53d67c03c 100644 --- a/reminders.go +++ b/reminders.go @@ -52,10 +52,17 @@ func (api *Client) doReminders(ctx context.Context, path string, values url.Valu // // See https://api.slack.com/methods/reminders.list func (api *Client) ListReminders() ([]*Reminder, error) { + return api.ListRemindersContext(context.Background()) +} + +// ListRemindersContext lists all the reminders created by or for the authenticated user with a custom context +// +// For more details, see ListReminders documentation. +func (api *Client) ListRemindersContext(ctx context.Context) ([]*Reminder, error) { values := url.Values{ "token": {api.token}, } - return api.doReminders(context.Background(), "reminders.list", values) + return api.doReminders(ctx, "reminders.list", values) } // AddChannelReminder adds a reminder for a channel. @@ -64,13 +71,20 @@ func (api *Client) ListReminders() ([]*Reminder, error) { // reminders on a channel is currently undocumented but has been tested to // work) func (api *Client) AddChannelReminder(channelID, text, time string) (*Reminder, error) { + return api.AddChannelReminderContext(context.Background(), channelID, text, time) +} + +// AddChannelReminderContext adds a reminder for a channel with a custom context +// +// For more details, see AddChannelReminder documentation. +func (api *Client) AddChannelReminderContext(ctx context.Context, channelID, text, time string) (*Reminder, error) { values := url.Values{ "token": {api.token}, "text": {text}, "time": {time}, "channel": {channelID}, } - return api.doReminder(context.Background(), "reminders.add", values) + return api.doReminder(ctx, "reminders.add", values) } // AddUserReminder adds a reminder for a user. @@ -79,25 +93,39 @@ func (api *Client) AddChannelReminder(channelID, text, time string) (*Reminder, // reminders on a channel is currently undocumented but has been tested to // work) func (api *Client) AddUserReminder(userID, text, time string) (*Reminder, error) { + return api.AddUserReminderContext(context.Background(), userID, text, time) +} + +// AddUserReminderContext adds a reminder for a user with a custom context +// +// For more details, see AddUserReminder documentation. +func (api *Client) AddUserReminderContext(ctx context.Context, userID, text, time string) (*Reminder, error) { values := url.Values{ "token": {api.token}, "text": {text}, "time": {time}, "user": {userID}, } - return api.doReminder(context.Background(), "reminders.add", values) + return api.doReminder(ctx, "reminders.add", values) } // DeleteReminder deletes an existing reminder. // // See https://api.slack.com/methods/reminders.delete func (api *Client) DeleteReminder(id string) error { + return api.DeleteReminderContext(context.Background(), id) +} + +// DeleteReminderContext deletes an existing reminder with a custom context +// +// For more details, see DeleteReminder documentation. +func (api *Client) DeleteReminderContext(ctx context.Context, id string) error { values := url.Values{ "token": {api.token}, "reminder": {id}, } response := &SlackResponse{} - if err := api.postMethod(context.Background(), "reminders.delete", values, response); err != nil { + if err := api.postMethod(ctx, "reminders.delete", values, response); err != nil { return err } return response.Err() diff --git a/webhooks.go b/webhooks.go index 97346e1c1..bec02288d 100644 --- a/webhooks.go +++ b/webhooks.go @@ -31,3 +31,7 @@ func PostWebhookContext(ctx context.Context, url string, msg *WebhookMessage) er func PostWebhookCustomHTTP(url string, httpClient *http.Client, msg *WebhookMessage) error { return PostWebhookCustomHTTPContext(context.Background(), url, httpClient, msg) } + +func PostWebhookContextCustomHTTP(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { + return PostWebhookCustomHTTPContext(ctx, url, httpClient, msg) +} From dacbdf8348dc26e583cc876b095b18797e6bbc98 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 14 Feb 2022 13:57:47 +0900 Subject: [PATCH 2/6] webhooks: remove go1.12 support Signed-off-by: Koichi Shiraishi --- webhooks.go | 24 ++++++++++++++++++++++++ webhooks_go112.go | 34 ---------------------------------- webhooks_go113.go | 33 --------------------------------- 3 files changed, 24 insertions(+), 67 deletions(-) delete mode 100644 webhooks_go112.go delete mode 100644 webhooks_go113.go diff --git a/webhooks.go b/webhooks.go index bec02288d..537b7e826 100644 --- a/webhooks.go +++ b/webhooks.go @@ -1,7 +1,10 @@ package slack import ( + "bytes" "context" + "encoding/json" + "fmt" "net/http" ) @@ -35,3 +38,24 @@ func PostWebhookCustomHTTP(url string, httpClient *http.Client, msg *WebhookMess func PostWebhookContextCustomHTTP(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { return PostWebhookCustomHTTPContext(ctx, url, httpClient, msg) } + +func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { + raw, err := json.Marshal(msg) + if err != nil { + return fmt.Errorf("marshal failed: %w", err) + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(raw)) + if err != nil { + return fmt.Errorf("failed new request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + resp, err := httpClient.Do(req) + if err != nil { + return fmt.Errorf("failed to post webhook: %w", err) + } + defer resp.Body.Close() + + return checkStatusCode(resp, discard{}) +} diff --git a/webhooks_go112.go b/webhooks_go112.go deleted file mode 100644 index 0eb539ac5..000000000 --- a/webhooks_go112.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:build !go1.13 -// +build !go1.13 - -package slack - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net/http" -) - -func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { - raw, err := json.Marshal(msg) - if err != nil { - return fmt.Errorf("marshal failed: %v", err) - } - - req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(raw)) - if err != nil { - return fmt.Errorf("failed new request: %v", err) - } - req = req.WithContext(ctx) - req.Header.Set("Content-Type", "application/json") - - resp, err := httpClient.Do(req) - if err != nil { - return fmt.Errorf("failed to post webhook: %v", err) - } - defer resp.Body.Close() - - return checkStatusCode(resp, discard{}) -} diff --git a/webhooks_go113.go b/webhooks_go113.go deleted file mode 100644 index 021eac014..000000000 --- a/webhooks_go113.go +++ /dev/null @@ -1,33 +0,0 @@ -//go:build go1.13 -// +build go1.13 - -package slack - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net/http" -) - -func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { - raw, err := json.Marshal(msg) - if err != nil { - return fmt.Errorf("marshal failed: %w", err) - } - - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(raw)) - if err != nil { - return fmt.Errorf("failed new request: %w", err) - } - req.Header.Set("Content-Type", "application/json") - - resp, err := httpClient.Do(req) - if err != nil { - return fmt.Errorf("failed to post webhook: %w", err) - } - defer resp.Body.Close() - - return checkStatusCode(resp, discard{}) -} From d89251bc623def17ccef2d66904850ae1c8fa78a Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 14 Feb 2022 18:35:28 +0900 Subject: [PATCH 3/6] misc: use NewRequestWithContext Signed-off-by: Koichi Shiraishi --- misc.go | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/misc.go b/misc.go index fc2927461..98e583bc7 100644 --- a/misc.go +++ b/misc.go @@ -66,13 +66,12 @@ func (e *RateLimitedError) Retryable() bool { } func fileUploadReq(ctx context.Context, path string, values url.Values, r io.Reader) (*http.Request, error) { - req, err := http.NewRequest("POST", path, r) + req, err := http.NewRequestWithContext(ctx, "POST", path, r) if err != nil { return nil, err } - req = req.WithContext(ctx) - req.URL.RawQuery = (values).Encode() + req.URL.RawQuery = values.Encode() return req, nil } @@ -81,14 +80,13 @@ func downloadFile(ctx context.Context, client httpClient, token string, download return fmt.Errorf("received empty download URL") } - req, err := http.NewRequest("GET", downloadURL, &bytes.Buffer{}) + req, err := http.NewRequestWithContext(ctx, "GET", downloadURL, &bytes.Buffer{}) if err != nil { return err } var bearer = "Bearer " + token req.Header.Add("Authorization", bearer) - req.WithContext(ctx) resp, err := client.Do(req) if err != nil { @@ -107,8 +105,8 @@ func downloadFile(ctx context.Context, client httpClient, token string, download return err } -func formReq(endpoint string, values url.Values) (req *http.Request, err error) { - if req, err = http.NewRequest("POST", endpoint, strings.NewReader(values.Encode())); err != nil { +func formReq(ctx context.Context, endpoint string, values url.Values) (req *http.Request, err error) { + if req, err = http.NewRequestWithContext(ctx, "POST", endpoint, strings.NewReader(values.Encode())); err != nil { return nil, err } @@ -116,13 +114,13 @@ func formReq(endpoint string, values url.Values) (req *http.Request, err error) return req, nil } -func jsonReq(endpoint string, body interface{}) (req *http.Request, err error) { +func jsonReq(ctx context.Context, endpoint string, body interface{}) (req *http.Request, err error) { buffer := bytes.NewBuffer([]byte{}) if err = json.NewEncoder(buffer).Encode(body); err != nil { return nil, err } - if req, err = http.NewRequest("POST", endpoint, buffer); err != nil { + if req, err = http.NewRequestWithContext(ctx, "POST", endpoint, buffer); err != nil { return nil, err } @@ -184,7 +182,6 @@ func postWithMultipartResponse(ctx context.Context, client httpClient, path, nam } req.Header.Add("Content-Type", wr.FormDataContentType()) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) - req = req.WithContext(ctx) resp, err := client.Do(req) if err != nil { @@ -206,7 +203,6 @@ func postWithMultipartResponse(ctx context.Context, client httpClient, path, nam } func doPost(ctx context.Context, client httpClient, req *http.Request, parser responseParser, d Debug) error { - req = req.WithContext(ctx) resp, err := client.Do(req) if err != nil { return err @@ -224,7 +220,7 @@ func doPost(ctx context.Context, client httpClient, req *http.Request, parser re // post JSON. func postJSON(ctx context.Context, client httpClient, endpoint, token string, json []byte, intf interface{}, d Debug) error { reqBody := bytes.NewBuffer(json) - req, err := http.NewRequest("POST", endpoint, reqBody) + req, err := http.NewRequestWithContext(ctx, "POST", endpoint, reqBody) if err != nil { return err } @@ -237,7 +233,7 @@ func postJSON(ctx context.Context, client httpClient, endpoint, token string, js // post a url encoded form. func postForm(ctx context.Context, client httpClient, endpoint string, values url.Values, intf interface{}, d Debug) error { reqBody := strings.NewReader(values.Encode()) - req, err := http.NewRequest("POST", endpoint, reqBody) + req, err := http.NewRequestWithContext(ctx, "POST", endpoint, reqBody) if err != nil { return err } @@ -246,7 +242,7 @@ func postForm(ctx context.Context, client httpClient, endpoint string, values ur } func getResource(ctx context.Context, client httpClient, endpoint, token string, values url.Values, intf interface{}, d Debug) error { - req, err := http.NewRequest("GET", endpoint, nil) + req, err := http.NewRequestWithContext(ctx, "GET", endpoint, nil) if err != nil { return err } From 1645ac27d4bb42352b968b8848ecc8c51bb7c427 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 14 Feb 2022 18:37:52 +0900 Subject: [PATCH 4/6] misc: use http.MethodXXX constant Signed-off-by: Koichi Shiraishi --- misc.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/misc.go b/misc.go index 98e583bc7..804724d7e 100644 --- a/misc.go +++ b/misc.go @@ -66,7 +66,7 @@ func (e *RateLimitedError) Retryable() bool { } func fileUploadReq(ctx context.Context, path string, values url.Values, r io.Reader) (*http.Request, error) { - req, err := http.NewRequestWithContext(ctx, "POST", path, r) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, path, r) if err != nil { return nil, err } @@ -80,7 +80,7 @@ func downloadFile(ctx context.Context, client httpClient, token string, download return fmt.Errorf("received empty download URL") } - req, err := http.NewRequestWithContext(ctx, "GET", downloadURL, &bytes.Buffer{}) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, downloadURL, &bytes.Buffer{}) if err != nil { return err } @@ -106,7 +106,7 @@ func downloadFile(ctx context.Context, client httpClient, token string, download } func formReq(ctx context.Context, endpoint string, values url.Values) (req *http.Request, err error) { - if req, err = http.NewRequestWithContext(ctx, "POST", endpoint, strings.NewReader(values.Encode())); err != nil { + if req, err = http.NewRequestWithContext(ctx, http.MethodPost, endpoint, strings.NewReader(values.Encode())); err != nil { return nil, err } @@ -120,7 +120,7 @@ func jsonReq(ctx context.Context, endpoint string, body interface{}) (req *http. return nil, err } - if req, err = http.NewRequestWithContext(ctx, "POST", endpoint, buffer); err != nil { + if req, err = http.NewRequestWithContext(ctx, http.MethodPost, endpoint, buffer); err != nil { return nil, err } @@ -220,7 +220,7 @@ func doPost(ctx context.Context, client httpClient, req *http.Request, parser re // post JSON. func postJSON(ctx context.Context, client httpClient, endpoint, token string, json []byte, intf interface{}, d Debug) error { reqBody := bytes.NewBuffer(json) - req, err := http.NewRequestWithContext(ctx, "POST", endpoint, reqBody) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, reqBody) if err != nil { return err } @@ -233,7 +233,7 @@ func postJSON(ctx context.Context, client httpClient, endpoint, token string, js // post a url encoded form. func postForm(ctx context.Context, client httpClient, endpoint string, values url.Values, intf interface{}, d Debug) error { reqBody := strings.NewReader(values.Encode()) - req, err := http.NewRequestWithContext(ctx, "POST", endpoint, reqBody) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, reqBody) if err != nil { return err } @@ -242,7 +242,7 @@ func postForm(ctx context.Context, client httpClient, endpoint string, values ur } func getResource(ctx context.Context, client httpClient, endpoint, token string, values url.Values, intf interface{}, d Debug) error { - req, err := http.NewRequestWithContext(ctx, "GET", endpoint, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil) if err != nil { return err } From 67b468f96f06d493226c293cdcf39b8b22ae52e4 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Thu, 24 Feb 2022 20:00:09 +0900 Subject: [PATCH 5/6] chat: add some BuildRequestContext methods for backwards compatibility Signed-off-by: Koichi Shiraishi --- chat.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/chat.go b/chat.go index 47f96ca40..34848d151 100644 --- a/chat.go +++ b/chat.go @@ -211,7 +211,7 @@ func (api *Client) SendMessageContext(ctx context.Context, channelID string, opt response chatResponseFull ) - if req, parser, err = buildSender(api.endpoint, options...).BuildRequest(ctx, api.token, channelID); err != nil { + if req, parser, err = buildSender(api.endpoint, options...).BuildRequestContext(ctx, api.token, channelID); err != nil { return "", "", "", err } @@ -291,7 +291,11 @@ type sendConfig struct { deleteOriginal bool } -func (t sendConfig) BuildRequest(ctx context.Context, token, channelID string) (req *http.Request, _ func(*chatResponseFull) responseParser, err error) { +func (t sendConfig) BuildRequest(token, channelID string) (req *http.Request, _ func(*chatResponseFull) responseParser, err error) { + return t.BuildRequestContext(context.Background(), token, channelID) +} + +func (t sendConfig) BuildRequestContext(ctx context.Context, token, channelID string) (req *http.Request, _ func(*chatResponseFull) responseParser, err error) { if t, err = applyMsgOptions(token, channelID, t.apiurl, t.options...); err != nil { return nil, nil, err } @@ -306,9 +310,9 @@ func (t sendConfig) BuildRequest(ctx context.Context, token, channelID string) ( responseType: t.responseType, replaceOriginal: t.replaceOriginal, deleteOriginal: t.deleteOriginal, - }.BuildRequest(ctx) + }.BuildRequestContext(ctx) default: - return formSender{endpoint: t.endpoint, values: t.values}.BuildRequest(ctx) + return formSender{endpoint: t.endpoint, values: t.values}.BuildRequestContext(ctx) } } @@ -317,7 +321,11 @@ type formSender struct { values url.Values } -func (t formSender) BuildRequest(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { +func (t formSender) BuildRequest() (*http.Request, func(*chatResponseFull) responseParser, error) { + return t.BuildRequestContext(context.Background()) +} + +func (t formSender) BuildRequestContext(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { req, err := formReq(ctx, t.endpoint, t.values) return req, func(resp *chatResponseFull) responseParser { return newJSONParser(resp) @@ -334,7 +342,11 @@ type responseURLSender struct { deleteOriginal bool } -func (t responseURLSender) BuildRequest(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { +func (t responseURLSender) BuildRequest() (*http.Request, func(*chatResponseFull) responseParser, error) { + return t.BuildRequestContext(context.Background()) +} + +func (t responseURLSender) BuildRequestContext(ctx context.Context) (*http.Request, func(*chatResponseFull) responseParser, error) { req, err := jsonReq(ctx, t.endpoint, Msg{ Text: t.values.Get("text"), Timestamp: t.values.Get("ts"), From 741a1f58204f2027c35b8d1beb36027f7487374f Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Thu, 24 Feb 2022 20:05:46 +0900 Subject: [PATCH 6/6] webhook: remove unnecessary PostWebhookContextCustomHTTP function Signed-off-by: Koichi Shiraishi --- webhooks.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/webhooks.go b/webhooks.go index 537b7e826..15097f03e 100644 --- a/webhooks.go +++ b/webhooks.go @@ -35,10 +35,6 @@ func PostWebhookCustomHTTP(url string, httpClient *http.Client, msg *WebhookMess return PostWebhookCustomHTTPContext(context.Background(), url, httpClient, msg) } -func PostWebhookContextCustomHTTP(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { - return PostWebhookCustomHTTPContext(ctx, url, httpClient, msg) -} - func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { raw, err := json.Marshal(msg) if err != nil {