GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#73)
by Yong
06:00
created

Request::removeRedundantParameters()   B

Complexity

Conditions 7
Paths 8

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 0
Metric Value
cc 7
eloc 6
nc 8
nop 0
dl 0
loc 12
ccs 0
cts 0
cp 0
crap 56
rs 8.8333
c 0
b 0
f 0
1
<?php
2
3
namespace AlibabaCloud\Client\Request;
4
5
use AlibabaCloud\Client\Credentials\Providers\CredentialsProvider;
6
use AlibabaCloud\Client\Exception\ClientException;
7
use AlibabaCloud\Client\Exception\ServerException;
8
use AlibabaCloud\Client\Filter;
9
use AlibabaCloud\Client\Http\GuzzleTrait;
10
use AlibabaCloud\Client\Request\Traits\AcsTrait;
11
use AlibabaCloud\Client\Request\Traits\ClientTrait;
12
use AlibabaCloud\Client\Request\Traits\DeprecatedTrait;
13
use AlibabaCloud\Client\Request\Traits\MagicTrait;
14
use AlibabaCloud\Client\Result\Result;
15
use AlibabaCloud\Client\Traits\ArrayAccessTrait;
16
use AlibabaCloud\Client\Traits\ObjectAccessTrait;
17
use GuzzleHttp\Client;
18
use GuzzleHttp\Exception\GuzzleException;
19
use GuzzleHttp\Psr7\Uri;
20
21
/**
22
 * Class Request
23
 *
24
 * @package   AlibabaCloud\Client\Request
25
 *
26
 * @method string resolveParameters($credential)
27
 */
28
abstract class Request implements \ArrayAccess
29
{
30
    use DeprecatedTrait;
31
    use GuzzleTrait;
32
    use MagicTrait;
33
    use ClientTrait;
34
    use AcsTrait;
35
    use ArrayAccessTrait;
36
    use ObjectAccessTrait;
37
38
    /**
39
     * @var array
40
     */
41
    public static $config = [];
42
43
    /**
44
     * @var string
45
     */
46
    public $scheme = 'http';
47
48
    /**
49
     * @var string
50
     */
51
    public $method = 'GET';
52
53
    /**
54
     * @var string
55
     */
56
    public $format = 'JSON';
57
58
    /**
59
     * @var string
60
     */
61
    public $client;
62
63
    /**
64
     * @var Uri
65
     */
66
    public $uri;
67
68
    /**
69
     * @var Client
70
     */
71
    public $guzzle;
72
73
    /**
74
     * @var array The original parameters of the request.
75
     */
76
    public $data = [];
77
78
    /**
79
     * @var string
80
     */
81
    protected $stringToBeSigned = '';
82
83
    /**
84
     * @var array
85
     */
86
    private $userAgent = [];
87
88
    /**
89
     * Request constructor.
90
     *
91
     * @param array $options
92
     *
93
     * @throws ClientException
94
     */
95 204
    public function __construct(array $options = [])
96
    {
97 204
        $this->client                     = CredentialsProvider::getDefaultName();
98 204
        $this->uri                        = new Uri();
99 204
        $this->uri                        = $this->uri->withScheme($this->scheme);
100 204
        $this->guzzle                     = new Client(self::$config);
101 204
        $this->options['http_errors']     = false;
102 204
        $this->options['timeout']         = ALIBABA_CLOUD_TIMEOUT;
103 204
        $this->options['connect_timeout'] = ALIBABA_CLOUD_CONNECT_TIMEOUT;
104 204
        if ($options !== []) {
105 1
            $this->options($options);
106 1
        }
107
108 204
        if (strtolower(\AlibabaCloud\Client\env('DEBUG')) === 'sdk') {
109 1
            $this->options['debug'] = true;
110 1
        }
111 204
    }
112
113
    /**
114
     * @param string $name
115
     * @param string $value
116
     *
117
     * @return $this
118
     * @throws ClientException
119
     */
120 5
    public function appendUserAgent($name, $value)
121
    {
122 5
        Filter::name($name);
123
124 3
        Filter::value($value);
125
126 1
        if (!UserAgent::isGuarded($name)) {
127 1
            $this->userAgent[$name] = $value;
128 1
        }
129
130 2
        return $this;
131
    }
132
133
    /**
134
     * @param array $userAgent
135
     *
136
     * @return $this
137
     */
138 2
    public function withUserAgent(array $userAgent)
139
    {
140 2
        $this->userAgent = UserAgent::clean($userAgent);
141
142 2
        return $this;
143
    }
144
145
    /**
146
     * Set the response data format.
147
     *
148
     * @param string $format
149
     *
150
     * @return $this
151
     * @throws ClientException
152
     */
153 16
    public function format($format)
154
    {
155 16
        Filter::format($format);
156
157 12
        $this->format = \strtoupper($format);
158
159 12
        return $this;
160
    }
161
162
    /**
163
     * Set the request body.
164
     *
165
     * @param string $body
166
     *
167
     * @return $this
168
     * @throws ClientException
169
     */
170 7
    public function body($body)
171
    {
172 7
        Filter::body($body);
173
174 5
        $this->options['body'] = $body;
175
176 5
        return $this;
177
    }
178
179
    /**
180
     * Set the json as body.
181
     *
182
     * @param array|object $content
183
     *
184
     * @return $this
185
     * @throws ClientException
186
     */
187 3
    public function jsonBody($content)
188
    {
189 3
        if (!\is_array($content) && !\is_object($content)) {
190 1
            throw new ClientException(
191 1
                'jsonBody only accepts an array or object',
192
                \ALIBABA_CLOUD_INVALID_ARGUMENT
193 1
            );
194
        }
195
196 2
        return $this->body(\json_encode($content));
197
    }
198
199
    /**
200
     * Set the request scheme.
201
     *
202
     * @param string $scheme
203
     *
204
     * @return $this
205
     * @throws ClientException
206
     */
207 32
    public function scheme($scheme)
208
    {
209 32
        Filter::scheme($scheme);
210
211 30
        $this->scheme = \strtolower($scheme);
212 30
        $this->uri    = $this->uri->withScheme($this->scheme);
213
214 30
        return $this;
215
    }
216
217
    /**
218
     * Set the request host.
219
     *
220
     * @param string $host
221
     *
222
     * @return $this
223
     * @throws ClientException
224
     */
225 35
    public function host($host)
226
    {
227 35
        Filter::host($host);
228
229 33
        $this->uri = $this->uri->withHost($host);
230
231 33
        return $this;
232
    }
233
234
    /**
235
     * @param string $method
236
     *
237
     * @return $this
238
     * @throws ClientException
239
     */
240 73
    public function method($method)
241
    {
242 73
        $this->method = Filter::method($method);
243
244 71
        return $this;
245
    }
246
247
    /**
248
     * @param string $clientName
249
     *
250
     * @return $this
251
     * @throws ClientException
252
     */
253 89
    public function client($clientName)
254
    {
255 89
        Filter::clientName($clientName);
256
257 87
        $this->client = $clientName;
258
259 87
        return $this;
260
    }
261
262
    /**
263
     * @return bool
264
     * @throws ClientException
265
     */
266 1
    public function isDebug()
267
    {
268 1
        if (isset($this->options['debug'])) {
269 1
            return $this->options['debug'] === true;
270
        }
271
272 1
        if (isset($this->httpClient()->options['debug'])) {
273 1
            return $this->httpClient()->options['debug'] === true;
274
        }
275
276 1
        return false;
277
    }
278
279
    /**
280
     * @return Result
281
     * @throws ClientException
282
     * @throws ServerException
283
     */
284 78
    public function request()
285
    {
286 78
        $this->removeRedundantParameters();
287
288 78
        $this->options['headers']['User-Agent'] = UserAgent::toString($this->userAgent);
289
290 78
        $this->resolveUri();
291
292 75
        $this->resolveParameters($this->credential());
293
294 58
        if (isset($this->options['form_params'])) {
295 31
            $this->options['form_params'] = \GuzzleHttp\Psr7\parse_query(
296 31
                self::getPostHttpBody($this->options['form_params'])
297 31
            );
298 31
        }
299
300 58
        $this->mergeOptionsIntoClient();
301
302 58
        $result = new Result($this->response(), $this);
303
304 47
        if (!$result->isSuccess()) {
305 23
            throw new ServerException($result);
306
        }
307
308 24
        return $result;
309
    }
310
311
    /**
312
     * Remove redundant parameters
313
     *
314
     * @codeCoverageIgnore
315
     */
316
    private function removeRedundantParameters()
317
    {
318
        if (isset($this->options['query']) && $this->options['query'] === []) {
319
            unset($this->options['query']);
320
        }
321
322
        if (isset($this->options['headers']) && $this->options['headers'] === []) {
323
            unset($this->options['headers']);
324
        }
325
326
        if (isset($this->options['form_params']) && $this->options['form_params'] === []) {
327
            unset($this->options['form_params']);
328
        }
329
    }
330
331
    /**
332
     * @param array $post
333
     *
334
     * @return bool|string
335
     */
336 34
    public static function getPostHttpBody(array $post)
337
    {
338 34
        $content = '';
339 34
        foreach ($post as $apiKey => $apiValue) {
340 34
            $content .= "$apiKey=" . urlencode($apiValue) . '&';
341 34
        }
342
343 34
        return substr($content, 0, -1);
344
    }
345
346
    /**
347
     * @throws ClientException
348
     */
349 58
    private function response()
350
    {
351
        try {
352 58
            return $this->guzzle->request(
353 58
                $this->method,
354 58
                (string)$this->uri,
355 58
                $this->options
356 58
            );
357 11
        } catch (GuzzleException $e) {
358 11
            throw new ClientException(
359 11
                $e->getMessage(),
360 11
                \ALIBABA_CLOUD_SERVER_UNREACHABLE,
361
                $e
362 11
            );
363
        }
364
    }
365
366
    /**
367
     * @return string
368
     */
369 25
    public function stringToBeSigned()
370
    {
371 25
        return $this->stringToBeSigned;
372
    }
373
}
374