Skip to content

Commit ffc681f

Browse files
EkeMinusYoulorenzoaiello
authored andcommitted
fix: create multipart form when multipart request (slack-go#1117)
* fix: create multipart form when multipart request * call createFormFields in go func() del coment * Trigger GitHub Actions --------- Co-authored-by: Lorenzo Aiello <[email protected]>
1 parent f27a5a6 commit ffc681f

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

misc.go

+24-3
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,12 @@ func (e *RateLimitedError) Retryable() bool {
6262
return true
6363
}
6464

65-
func fileUploadReq(ctx context.Context, path string, values url.Values, r io.Reader) (*http.Request, error) {
65+
func fileUploadReq(ctx context.Context, path string, r io.Reader) (*http.Request, error) {
6666
req, err := http.NewRequestWithContext(ctx, http.MethodPost, path, r)
6767
if err != nil {
6868
return nil, err
6969
}
7070

71-
req.URL.RawQuery = values.Encode()
7271
return req, nil
7372
}
7473

@@ -155,9 +154,16 @@ func postLocalWithMultipartResponse(ctx context.Context, client httpClient, meth
155154
func postWithMultipartResponse(ctx context.Context, client httpClient, path, name, fieldname, token string, values url.Values, r io.Reader, intf interface{}, d Debug) error {
156155
pipeReader, pipeWriter := io.Pipe()
157156
wr := multipart.NewWriter(pipeWriter)
157+
158158
errc := make(chan error)
159159
go func() {
160160
defer pipeWriter.Close()
161+
defer wr.Close()
162+
err := createFormFields(wr, values)
163+
if err != nil {
164+
errc <- err
165+
return
166+
}
161167
ioWriter, err := wr.CreateFormFile(fieldname, name)
162168
if err != nil {
163169
errc <- err
@@ -173,7 +179,8 @@ func postWithMultipartResponse(ctx context.Context, client httpClient, path, nam
173179
return
174180
}
175181
}()
176-
req, err := fileUploadReq(ctx, path, values, pipeReader)
182+
183+
req, err := fileUploadReq(ctx, path, pipeReader)
177184
if err != nil {
178185
return err
179186
}
@@ -199,6 +206,20 @@ func postWithMultipartResponse(ctx context.Context, client httpClient, path, nam
199206
}
200207
}
201208

209+
func createFormFields(mw *multipart.Writer, values url.Values) error {
210+
for key, value := range values {
211+
writer, err := mw.CreateFormField(key)
212+
if err != nil {
213+
return err
214+
}
215+
_, err = writer.Write([]byte(value[0]))
216+
if err != nil {
217+
return err
218+
}
219+
}
220+
return nil
221+
}
222+
202223
func doPost(ctx context.Context, client httpClient, req *http.Request, parser responseParser, d Debug) error {
203224
resp, err := client.Do(req)
204225
if err != nil {

remotefiles.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,7 @@ func (api *Client) UpdateRemoteFile(fileID string, params RemoteFileParameters)
247247
// Slack API docs: https://api.slack.com/methods/files.remote.update
248248
func (api *Client) UpdateRemoteFileContext(ctx context.Context, fileID string, params RemoteFileParameters) (remotefile *RemoteFile, err error) {
249249
response := &remoteFileResponseFull{}
250-
values := url.Values{
251-
"token": {api.token},
252-
}
250+
values := url.Values{}
253251
if fileID != "" {
254252
values.Add("file", fileID)
255253
}
@@ -271,6 +269,7 @@ func (api *Client) UpdateRemoteFileContext(ctx context.Context, fileID string, p
271269
if params.PreviewImageReader != nil {
272270
err = postWithMultipartResponse(ctx, api.httpclient, api.endpoint+"files.remote.update", "preview.png", "preview_image", api.token, values, params.PreviewImageReader, response, api)
273271
} else {
272+
values.Add("token", api.token)
274273
response, err = api.remoteFileRequest(ctx, "files.remote.update", values)
275274
}
276275

0 commit comments

Comments
 (0)