1
1
package serverscom
2
2
3
3
import (
4
- "bytes"
5
4
"context"
6
5
"encoding/json"
7
6
"fmt"
8
- "io/ioutil"
9
7
"net/http"
10
8
"net/url"
11
9
"strings"
10
+
11
+ "github.com/go-resty/resty/v2"
12
12
)
13
13
14
14
const defaultAPIEndpoint string = "https://api.servers.com/v1"
@@ -40,9 +40,7 @@ type Client struct {
40
40
41
41
KubernetesClusters KubernetesClustersService
42
42
43
- token string
44
-
45
- client * http.Client
43
+ client * resty.Client
46
44
}
47
45
48
46
// NewClient builds a new client with token
@@ -56,13 +54,15 @@ func NewClientWithEndpoint(token, baseURL string) *Client {
56
54
Proxy : http .ProxyFromEnvironment ,
57
55
}
58
56
59
- client := & http.Client {Transport : tr }
57
+ rClient := resty .NewWithClient (& http.Client {Transport : tr })
58
+
59
+ rClient .SetAuthToken (token )
60
+ rClient .SetHeader ("Content-Type" , "application/json" )
61
+ rClient .SetHeader ("User-Agent" , "go-serverscom-client" )
60
62
61
63
scClient := & Client {
62
- baseURL : baseURL ,
63
- UserAgent : "go-serverscom-client" ,
64
- token : token ,
65
- client : client ,
64
+ baseURL : baseURL ,
65
+ client : rClient ,
66
66
}
67
67
68
68
scClient .configureResources ()
@@ -75,6 +75,11 @@ func (cli *Client) SetupUserAgent(userAgent string) {
75
75
cli .UserAgent = userAgent
76
76
}
77
77
78
+ // SetVerbose sets debug mode for client
79
+ func (cli * Client ) SetVerbose (verbose bool ) {
80
+ cli .client .SetDebug (verbose )
81
+ }
82
+
78
83
func (cli * Client ) configureResources () {
79
84
cli .CloudComputingInstances = & CloudComputingInstancesHandler {cli }
80
85
cli .Hosts = & HostsHandler {cli }
@@ -122,51 +127,31 @@ func (cli *Client) applyParams(endpointURL string, params map[string]string) str
122
127
)
123
128
}
124
129
125
- func (cli * Client ) buildAndExecRequestWithResponse (ctx context.Context , method , endpointURL string , body []byte ) (* http.Response , []byte , error ) {
126
- var req * http.Request
127
- var err error
130
+ func (cli * Client ) buildAndExecRequestWithResponse (ctx context.Context , method , endpointURL string , body []byte ) (* resty.Response , []byte , error ) {
131
+ request := cli .client .R ().SetContext (ctx )
128
132
129
133
if body != nil {
130
- reader := bytes .NewReader (body )
131
- req , err = http .NewRequest (method , endpointURL , reader )
132
- } else {
133
- req , err = http .NewRequest (method , endpointURL , nil )
134
- }
135
-
136
- if err != nil {
137
- return nil , nil , err
134
+ request .SetBody (body )
138
135
}
139
136
140
- req .Header .Add ("Authorization" , fmt .Sprintf ("Bearer %s" , cli .token ))
141
- req .Header .Add ("Content-Type" , "application/json" )
142
- req .Header .Set ("User-Agent" , cli .UserAgent )
143
-
144
- resp , err := cli .client .Do (req .WithContext (ctx ))
145
-
137
+ resp , err := request .Execute (method , endpointURL )
146
138
if err != nil {
147
139
return nil , nil , fmt .Errorf ("Client request error: %q" , err )
148
140
}
149
141
150
- defer resp .Body .Close ()
151
-
152
- contents , err := ioutil .ReadAll (resp .Body )
142
+ contents := resp .Body ()
153
143
154
- if err != nil {
155
- return nil , nil , fmt .Errorf ("Client can't read body: %q" , err )
156
- }
157
-
158
- if resp .StatusCode < 400 {
144
+ if resp .StatusCode () < 400 {
159
145
return resp , contents , nil
160
146
}
161
147
162
- contentType := resp .Header .Get ("Content-Type" )
163
-
164
- var responseError = responseErrorWrapper {}
148
+ contentType := resp .Header ().Get ("Content-Type" )
149
+ var responseError responseErrorWrapper
165
150
166
151
if strings .HasPrefix (contentType , "application/json" ) {
167
152
if err := json .Unmarshal (contents , & responseError ); err != nil {
168
153
return nil , nil , newParsingError (
169
- resp .StatusCode ,
154
+ resp .StatusCode () ,
170
155
string (contents ),
171
156
err ,
172
157
)
@@ -176,23 +161,23 @@ func (cli *Client) buildAndExecRequestWithResponse(ctx context.Context, method,
176
161
responseError .Message = string (contents )
177
162
}
178
163
179
- switch resp .StatusCode {
164
+ switch resp .StatusCode () {
180
165
case 400 :
181
- return nil , nil , newBadRequestError (resp .StatusCode , responseError .Code , responseError .Message )
166
+ return nil , nil , newBadRequestError (resp .StatusCode () , responseError .Code , responseError .Message )
182
167
case 401 :
183
- return nil , nil , newUnauthorizedError (resp .StatusCode , responseError .Code , responseError .Message )
168
+ return nil , nil , newUnauthorizedError (resp .StatusCode () , responseError .Code , responseError .Message )
184
169
case 403 :
185
- return nil , nil , newForbiddenError (resp .StatusCode , responseError .Code , responseError .Message )
170
+ return nil , nil , newForbiddenError (resp .StatusCode () , responseError .Code , responseError .Message )
186
171
case 404 :
187
- return nil , nil , newNotFoundError (resp .StatusCode , responseError .Code , responseError .Message )
172
+ return nil , nil , newNotFoundError (resp .StatusCode () , responseError .Code , responseError .Message )
188
173
case 409 :
189
- return nil , nil , newConflictError (resp .StatusCode , responseError .Code , responseError .Message )
174
+ return nil , nil , newConflictError (resp .StatusCode () , responseError .Code , responseError .Message )
190
175
case 422 :
191
- return nil , nil , newUnprocessableEntityError (resp .StatusCode , responseError .Code , responseError .Message , responseError .Errors )
176
+ return nil , nil , newUnprocessableEntityError (resp .StatusCode () , responseError .Code , responseError .Message , responseError .Errors )
192
177
case 500 :
193
- return nil , nil , newInternalServerError (resp .StatusCode , responseError .Code , responseError .Message )
178
+ return nil , nil , newInternalServerError (resp .StatusCode () , responseError .Code , responseError .Message )
194
179
default :
195
- return nil , nil , fmt .Errorf ("Unexpected response code: %d, with body: %s" , resp .StatusCode , string (contents ))
180
+ return nil , nil , fmt .Errorf ("Unexpected response code: %d, with body: %s" , resp .StatusCode () , string (contents ))
196
181
}
197
182
}
198
183
0 commit comments