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
11:11 queued 02:01
created

Request::removeRedundantQuery()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

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