6
6
"encoding/json"
7
7
"fmt"
8
8
"io"
9
- "io/ioutil"
10
9
"mime/multipart"
11
10
"net/http"
12
11
"net/url"
@@ -131,6 +130,7 @@ func (f *urlEncodedPayload) getPayloadBuffer() (*bytes.Buffer, error) {
131
130
for _ , keyVal := range f .Values {
132
131
data .Add (keyVal .key , keyVal .value )
133
132
}
133
+
134
134
return bytes .NewBufferString (data .Encode ()), nil
135
135
}
136
136
@@ -177,6 +177,7 @@ func (f *formDataPayload) getPayloadBuffer() (*bytes.Buffer, error) {
177
177
178
178
for _ , keyVal := range f .Values {
179
179
if tmp , err := writer .CreateFormField (keyVal .key ); err == nil {
180
+ // TODO(DE-1139): handle error:
180
181
tmp .Write ([]byte (keyVal .value ))
181
182
} else {
182
183
return nil , err
@@ -186,7 +187,9 @@ func (f *formDataPayload) getPayloadBuffer() (*bytes.Buffer, error) {
186
187
for _ , file := range f .Files {
187
188
if tmp , err := writer .CreateFormFile (file .key , path .Base (file .value )); err == nil {
188
189
if fp , err := os .Open (file .value ); err == nil {
190
+ // TODO(DE-1139): defer in a loop:
189
191
defer fp .Close ()
192
+ // TODO(DE-1139): handle error:
190
193
io .Copy (tmp , fp )
191
194
} else {
192
195
return nil , err
@@ -198,7 +201,9 @@ func (f *formDataPayload) getPayloadBuffer() (*bytes.Buffer, error) {
198
201
199
202
for _ , file := range f .ReadClosers {
200
203
if tmp , err := writer .CreateFormFile (file .key , file .name ); err == nil {
204
+ // TODO(DE-1139): defer in a loop:
201
205
defer file .value .Close ()
206
+ // TODO(DE-1139): handle error:
202
207
io .Copy (tmp , file .value )
203
208
} else {
204
209
return nil , err
@@ -208,6 +213,7 @@ func (f *formDataPayload) getPayloadBuffer() (*bytes.Buffer, error) {
208
213
for _ , buff := range f .Buffers {
209
214
if tmp , err := writer .CreateFormFile (buff .key , buff .name ); err == nil {
210
215
r := bytes .NewReader (buff .value )
216
+ // TODO(DE-1139): handle error:
211
217
io .Copy (tmp , r )
212
218
} else {
213
219
return nil , err
@@ -221,8 +227,10 @@ func (f *formDataPayload) getPayloadBuffer() (*bytes.Buffer, error) {
221
227
222
228
func (f * formDataPayload ) getContentType () string {
223
229
if f .contentType == "" {
230
+ // TODO(DE-1139): handle error:
224
231
f .getPayloadBuffer ()
225
232
}
233
+
226
234
return f .contentType
227
235
}
228
236
@@ -234,23 +242,23 @@ func (r *httpRequest) addHeader(name, value string) {
234
242
}
235
243
236
244
func (r * httpRequest ) makeGetRequest (ctx context.Context ) (* httpResponse , error ) {
237
- return r .makeRequest (ctx , "GET" , nil )
245
+ return r .makeRequest (ctx , http . MethodGet , nil )
238
246
}
239
247
240
248
func (r * httpRequest ) makePostRequest (ctx context.Context , payload payload ) (* httpResponse , error ) {
241
- return r .makeRequest (ctx , "POST" , payload )
249
+ return r .makeRequest (ctx , http . MethodPost , payload )
242
250
}
243
251
244
252
func (r * httpRequest ) makePutRequest (ctx context.Context , payload payload ) (* httpResponse , error ) {
245
- return r .makeRequest (ctx , "PUT" , payload )
253
+ return r .makeRequest (ctx , http . MethodPut , payload )
246
254
}
247
255
248
256
func (r * httpRequest ) makeDeleteRequest (ctx context.Context ) (* httpResponse , error ) {
249
- return r .makeRequest (ctx , "DELETE" , nil )
257
+ return r .makeRequest (ctx , http . MethodDelete , nil )
250
258
}
251
259
252
260
func (r * httpRequest ) NewRequest (ctx context.Context , method string , payload payload ) (* http.Request , error ) {
253
- url , err := r .generateUrlWithParameters ()
261
+ uri , err := r .generateUrlWithParameters ()
254
262
if err != nil {
255
263
return nil , err
256
264
}
@@ -263,13 +271,12 @@ func (r *httpRequest) NewRequest(ctx context.Context, method string, payload pay
263
271
} else {
264
272
body = nil
265
273
}
266
- req , err := http .NewRequest (method , url , body )
274
+
275
+ req , err := http .NewRequestWithContext (ctx , method , uri , body )
267
276
if err != nil {
268
277
return nil , err
269
278
}
270
279
271
- req = req .WithContext (ctx )
272
-
273
280
if payload != nil && payload .getContentType () != "" {
274
281
req .Header .Add ("Content-Type" , payload .getContentType ())
275
282
}
@@ -286,6 +293,7 @@ func (r *httpRequest) NewRequest(ctx context.Context, method string, payload pay
286
293
}
287
294
req .Header .Add (header , value )
288
295
}
296
+
289
297
return req , nil
290
298
}
291
299
@@ -305,52 +313,53 @@ func (r *httpRequest) makeRequest(ctx context.Context, method string, payload pa
305
313
}
306
314
}
307
315
308
- response := httpResponse {}
309
-
310
316
resp , err := r .Client .Do (req )
311
- if resp != nil {
312
- response .Code = resp .StatusCode
313
- }
314
317
if err != nil {
315
- if urlErr , ok := err .(* url.Error ); ok {
316
- if urlErr .Err == io .EOF {
317
- return nil , errors .Wrap (err , "remote server prematurely closed connection" )
318
- }
318
+ var urlErr * url.Error
319
+ if errors .As (err , & urlErr ) && urlErr != nil && errors .Is (urlErr .Err , io .EOF ) {
320
+ return nil , errors .Wrap (err , "remote server prematurely closed connection" )
319
321
}
322
+
320
323
return nil , errors .Wrap (err , "while making http request" )
321
324
}
322
325
323
326
defer resp .Body .Close ()
324
- responseBody , err := ioutil .ReadAll (resp .Body )
327
+
328
+ response := httpResponse {
329
+ Code : resp .StatusCode ,
330
+ }
331
+
332
+ responseBody , err := io .ReadAll (resp .Body )
325
333
if err != nil {
326
334
return nil , errors .Wrap (err , "while reading response body" )
327
335
}
328
336
329
337
response .Data = responseBody
338
+
330
339
return & response , nil
331
340
}
332
341
333
342
func (r * httpRequest ) generateUrlWithParameters () (string , error ) {
334
- url , err := url .Parse (r .URL )
343
+ uri , err := url .Parse (r .URL )
335
344
if err != nil {
336
345
return "" , err
337
346
}
338
347
339
- if ! validURL .MatchString (url .Path ) {
340
- return "" , errors .New (`BaseAPI must end with a /v1, /v2, /v3 or /v4; setBaseAPI ("https://host/v3")` )
348
+ if ! validURL .MatchString (uri .Path ) {
349
+ return "" , errors .New (`APIBase must end with a /v1, /v2, /v3 or /v4; SetAPIBase ("https://host/v3")` )
341
350
}
342
351
343
- q := url .Query ()
352
+ q := uri .Query ()
344
353
if r .Parameters != nil && len (r .Parameters ) > 0 {
345
354
for name , values := range r .Parameters {
346
355
for _ , value := range values {
347
356
q .Add (name , value )
348
357
}
349
358
}
350
359
}
351
- url .RawQuery = q .Encode ()
360
+ uri .RawQuery = q .Encode ()
352
361
353
- return url .String (), nil
362
+ return uri .String (), nil
354
363
}
355
364
356
365
func (r * httpRequest ) curlString (req * http.Request , p payload ) string {
@@ -384,5 +393,6 @@ func (r *httpRequest) curlString(req *http.Request, p payload) string {
384
393
}
385
394
}
386
395
}
396
+
387
397
return strings .Join (parts , " " )
388
398
}
0 commit comments