Passed
Push — master ( ebaf6c...309a74 )
by Solo
02:46
created

CurlInitializer::get2()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 11
nc 1
nop 2
dl 0
loc 14
ccs 13
cts 13
cp 1
crap 2
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace mpyw\Cowitter\Components;
4
5
use mpyw\Cowitter\Helpers\RequestParamValidator;
6
use mpyw\Cowitter\Helpers\UrlNormalizer;
7
8
class CurlInitializer
9
{
10
    protected $credential;
11
    protected $options;
12
13 68
    public function __construct(Credential $credential, array $options)
14 68
    {
15 68
        $this->credential = $credential;
16 68
        $this->options = $options;
17 68
    }
18
19 12
    public function get($endpoint, array $params)
20 12
    {
21 12
        $ch = curl_init();
22 12
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
23 12
        $params += $extra;
24 12
        $params = RequestParamValidator::validateParams($params);
25 12
        curl_setopt_array($ch, array_replace($this->options, [
26 12
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
27 12
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'GET', $params),
28 12
            CURLOPT_RETURNTRANSFER => true,
29 12
            CURLOPT_HEADER         => true,
30 12
            CURLOPT_HTTPGET        => true,
31
        ]));
32 12
        return $ch;
33
    }
34
35 16
    protected function custom($method, $endpoint, array $params, $json = false)
0 ignored issues
show
Unused Code introduced by
The parameter $json is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

35
    protected function custom($method, $endpoint, array $params, /** @scrutinizer ignore-unused */ $json = false)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
36 16
    {
37 16
        $ch = curl_init();
38 16
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
39 16
        $params += $extra;
40 16
        $params = RequestParamValidator::validateParams($params);
41 16
        curl_setopt_array($ch, array_replace($this->options, [
42 16
            CURLOPT_URL            => $url,
43 16
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, $method, $params),
44 16
            CURLOPT_RETURNTRANSFER => true,
45 16
            CURLOPT_HEADER         => true,
46 16
            CURLOPT_CUSTOMREQUEST  => $method,
47 16
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
48
        ]));
49 16
        return $ch;
50
    }
51
52 16
    public function post($endpoint, array $params)
53 16
    {
54 16
        return $this->custom('POST', $endpoint, $params);
55
    }
56
57
    public function postJson($endpoint, array $params)
58
    {
59
        return $this->custom('POST', $endpoint, $params, true);
60
    }
61
62
    public function delete($endpoint, array $params)
63
    {
64
        return $this->custom('DELETE', $endpoint, $params);
65
    }
66
67
    public function put($endpoint, array $params)
68
    {
69
        return $this->custom('PUT', $endpoint, $params);
70
    }
71
72 12
    public function postMultipart($endpoint, array $params)
73 12
    {
74 12
        $ch = curl_init();
75 12
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
76 12
        $params += $extra;
77 12
        $params = RequestParamValidator::validateMultipartParams($params);
78 12
        curl_setopt_array($ch, array_replace($this->options, [
79 12
            CURLOPT_URL            => $url,
80 12
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'POST', []),
81 12
            CURLOPT_RETURNTRANSFER => true,
82 12
            CURLOPT_HEADER         => true,
83 12
            CURLOPT_POST           => true,
84 12
            CURLOPT_POSTFIELDS     => $params,
85
        ]));
86 12
        return $ch;
87
    }
88
89 2
    public function getOut($endpoint, array $params)
90 2
    {
91 2
        $ch = curl_init();
92 2
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
93 2
        $params += $extra;
94 2
        $params = RequestParamValidator::validateParams($params);
95 2
        curl_setopt_array($ch, array_replace($this->options, [
96 2
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
97 2
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
98 2
            CURLOPT_RETURNTRANSFER => true,
99 2
            CURLOPT_HEADER         => true,
100 2
            CURLOPT_HTTPGET        => true,
101
        ]));
102 2
        return $ch;
103
    }
104
105 2
    public function postOut($endpoint, array $params)
106 2
    {
107 2
        $ch = curl_init();
108 2
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
109 2
        $params += $extra;
110 2
        $params = RequestParamValidator::validateParams($params);
111 2
        curl_setopt_array($ch, array_replace($this->options, [
112 2
            CURLOPT_URL            => $url,
113 2
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
114 2
            CURLOPT_RETURNTRANSFER => true,
115 2
            CURLOPT_HEADER         => true,
116 2
            CURLOPT_POST           => true,
117 2
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
118
        ]));
119 2
        return $ch;
120
    }
121
122 2
    public function postMultipartOut($endpoint, array $params)
123 2
    {
124 2
        $ch = curl_init();
125 2
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
126 2
        $params += $extra;
127 2
        $params = RequestParamValidator::validateMultipartParams($params);
128 2
        curl_setopt_array($ch, array_replace($this->options, [
129 2
            CURLOPT_URL            => $url,
130 2
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
131 2
            CURLOPT_RETURNTRANSFER => true,
132 2
            CURLOPT_HEADER         => true,
133 2
            CURLOPT_POST           => true,
134 2
            CURLOPT_POSTFIELDS     => $params,
135
        ]));
136 2
        return $ch;
137
    }
138
139 15
    public function streaming($endpoint, array $params, StreamHandler $handler)
140 15
    {
141 15
        $ch = curl_init();
142 15
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
143 15
        $params += $extra;
144 15
        $params = RequestParamValidator::validateParams($params);
145 15
        curl_setopt_array($ch, array_replace($this->options, [
146 15
            CURLOPT_URL            => $url,
147 15
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'POST', $params),
148 15
            CURLOPT_POST           => true,
149 15
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
150 15
            CURLOPT_HEADERFUNCTION => [$handler, 'headerFunction'],
151 15
            CURLOPT_WRITEFUNCTION  => [$handler, 'writeFunction'],
152
        ]));
153 15
        return $ch;
154
    }
155
156 6
    public function oauthForRequestToken($oauth_callback = null)
157 6
    {
158 6
        if ($oauth_callback !== null) {
159 6
            $oauth_callback = RequestParamValidator::validateStringable('oauth_callback', $oauth_callback);
160
        }
161 6
        $ch = curl_init();
162 6
        curl_setopt_array($ch, array_replace($this->options, [
163 6
            CURLOPT_URL            => 'https://api.twitter.com/oauth/request_token',
164 6
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForRequestToken($oauth_callback),
165 6
            CURLOPT_RETURNTRANSFER => true,
166 6
            CURLOPT_HEADER         => true,
167 6
            CURLOPT_POST           => true,
168 6
            CURLOPT_POSTFIELDS     => '',
169
        ]));
170 6
        return $ch;
171
    }
172
173 4
    public function oauthForAccessToken($oauth_verifier)
174 4
    {
175 4
        $oauth_verifier = RequestParamValidator::validateStringable('oauth_verifier', $oauth_verifier);
176 4
        $ch = curl_init();
177 4
        curl_setopt_array($ch, array_replace($this->options, [
178 4
            CURLOPT_URL            => 'https://api.twitter.com/oauth/access_token',
179 4
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForAccessToken($oauth_verifier),
180 4
            CURLOPT_RETURNTRANSFER => true,
181 4
            CURLOPT_HEADER         => true,
182 4
            CURLOPT_POST           => true,
183 4
            CURLOPT_POSTFIELDS     => '',
184
        ]));
185 4
        return $ch;
186
    }
187
188 2
    public function xauthForAccessToken($username, $password)
189 2
    {
190 2
        $username = RequestParamValidator::validateStringable('username', $username);
191 2
        $password = RequestParamValidator::validateStringable('password', $password);
192 2
        $ch = curl_init();
193 2
        curl_setopt_array($ch, array_replace($this->options, [
194 2
            CURLOPT_URL            => 'https://api.twitter.com/oauth/access_token',
195 2
            CURLOPT_HTTPHEADER     => $this->credential->getXAuthHeadersForAccessToken($username, $password),
196 2
            CURLOPT_RETURNTRANSFER => true,
197 2
            CURLOPT_HEADER         => true,
198 2
            CURLOPT_POST           => true,
199 2
            CURLOPT_POSTFIELDS     => http_build_query([
200 2
                'x_auth_username' => $username,
201 2
                'x_auth_password' => $password,
202 2
                'x_auth_mode'     => 'client_auth',
203 2
            ], '', '&'),
204
        ]));
205 2
        return $ch;
206
    }
207
208 2
    public function oauthForBearerToken()
209 2
    {
210 2
        $ch = curl_init();
211 2
        curl_setopt_array($ch, array_replace($this->options, [
212 2
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/token',
213 2
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
214 2
            CURLOPT_RETURNTRANSFER => true,
215 2
            CURLOPT_HEADER         => true,
216 2
            CURLOPT_POST           => true,
217 2
            CURLOPT_POSTFIELDS     => http_build_query([
218 2
                'grant_type' => 'client_credentials',
219 2
            ], '', '&'),
220
        ]));
221 2
        return $ch;
222
    }
223
224 2
    public function get2($endpoint, $params = [])
225 2
    {
226 2
        $ch = curl_init();
227 2
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
228 2
        $params += $extra;
229 2
        $params = RequestParamValidator::validateParams($params);
230 2
        curl_setopt_array($ch, array_replace($this->options, [
231 2
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
232 2
            CURLOPT_HTTPHEADER     => $this->credential->getBearerHeaders(),
233 2
            CURLOPT_RETURNTRANSFER => true,
234 2
            CURLOPT_HEADER         => true,
235 2
            CURLOPT_HTTPGET        => true,
236
        ]));
237 2
        return $ch;
238
    }
239
240
    protected function custom2($method, $endpoint, $params = [])
241
    {
242
        $ch = curl_init();
243
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
244
        $params += $extra;
245
        $params = RequestParamValidator::validateParams($params);
246
        curl_setopt_array($ch, array_replace($this->options, [
247
            CURLOPT_URL            => $url,
248
            CURLOPT_HTTPHEADER     => $this->credential->getBearerHeaders(),
249
            CURLOPT_RETURNTRANSFER => true,
250
            CURLOPT_HEADER         => true,
251
            CURLOPT_CUSTOMREQUEST  => $method,
252
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
253
        ]));
254
        return $ch;
255
    }
256
257
    public function post2($endpoint, array $params)
258
    {
259
        return $this->custom2('POST', $endpoint, $params);
260
    }
261
262
    public function delete2($endpoint, array $params)
263
    {
264
        return $this->custom2('DELETE', $endpoint, $params);
265
    }
266
267
    public function put2($endpoint, array $params)
268
    {
269
        return $this->custom2('PUT', $endpoint, $params);
270
    }
271
272 2
    public function invalidateBearerToken()
273 2
    {
274 2
        $ch = curl_init();
275 2
        curl_setopt_array($ch, array_replace($this->options, [
276 2
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/invalidate_token',
277 2
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
278 2
            CURLOPT_RETURNTRANSFER => true,
279 2
            CURLOPT_HEADER         => true,
280 2
            CURLOPT_POST           => true,
281 2
            CURLOPT_POSTFIELDS     => http_build_query([
282 2
                'access_token' => rawurldecode($this->credential->token),
283 2
            ], '', '&', PHP_QUERY_RFC3986),
284
        ]));
285 2
        return $ch;
286
    }
287
288 8
    public function browsing()
289 8
    {
290 8
        $ch = curl_init();
291 8
        curl_setopt_array($ch, array_replace($this->options, [
292 8
            CURLOPT_COOKIEFILE     => '',
293 8
            CURLOPT_RETURNTRANSFER => true,
294 8
            CURLOPT_HEADER         => true,
295
        ]));
296 8
        return $ch;
297
    }
298
}