Test Failed
Push — master ( 4ac754...8cf9e8 )
by Solo
02:34
created

CurlInitializer::put2()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

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