Completed
Push — master ( 3cf178...59e65f )
by Ryosuke
03:33
created

CurlInitializer::oauthForAccessToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 13
ccs 0
cts 11
cp 0
rs 9.4285
cc 1
eloc 10
nc 1
nop 1
crap 2
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 26
    public function __construct(Credential $credential, array $options)
14 26
    {
15 26
        $this->credential = $credential;
16 26
        $this->options = $options;
17 26
    }
18
19 7
    public function get($endpoint, array $params)
20 7
    {
21 7
        $ch = curl_init();
22 7
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
23 7
        $params += $extra;
24 7
        $params = RequestParamValidator::validateParams($params);
25 7
        curl_setopt_array($ch, array_replace($this->options, [
26 7
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
27 7
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'GET', $params),
28 7
            CURLOPT_RETURNTRANSFER => true,
29 7
            CURLOPT_HEADER         => true,
30 7
            CURLOPT_HTTPGET        => true,
31
        ]));
32 7
        return $ch;
33
    }
34
35 6
    public function post($endpoint, array $params)
36 6
    {
37 6
        $ch = curl_init();
38 6
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
39 6
        $params += $extra;
40 6
        $params = RequestParamValidator::validateParams($params);
41 6
        curl_setopt_array($ch, array_replace($this->options, [
42 6
            CURLOPT_URL            => $url,
43 6
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'POST', $params),
44 6
            CURLOPT_RETURNTRANSFER => true,
45 6
            CURLOPT_HEADER         => true,
46 6
            CURLOPT_POST           => true,
47 6
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
48
        ]));
49 6
        return $ch;
50
    }
51
52 2
    public function postMultipart($endpoint, array $params)
53 2
    {
54 2
        $ch = curl_init();
55 2
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
56 2
        $params += $extra;
57 2
        $params = RequestParamValidator::validateMultipartParams($params);
58 2
        curl_setopt_array($ch, array_replace($this->options, [
59 2
            CURLOPT_URL            => $url,
60 2
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'POST', []),
61 2
            CURLOPT_RETURNTRANSFER => true,
62 2
            CURLOPT_HEADER         => true,
63 2
            CURLOPT_POST           => true,
64 2
            CURLOPT_POSTFIELDS     => $params,
65
        ]));
66 2
        return $ch;
67
    }
68
69
    public function getOut($endpoint, array $params)
70
    {
71
        $ch = curl_init();
72
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
73
        $params += $extra;
74
        $params = RequestParamValidator::validateParams($params);
75
        curl_setopt_array($ch, array_replace($this->options, [
76
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
77
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
78
            CURLOPT_RETURNTRANSFER => true,
79
            CURLOPT_HEADER         => true,
80
            CURLOPT_HTTPGET        => true,
81
        ]));
82
        return $ch;
83
    }
84
85
    public function postOut($endpoint, array $params)
86
    {
87
        $ch = curl_init();
88
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
89
        $params += $extra;
90
        $params = RequestParamValidator::validateParams($params);
91
        curl_setopt_array($ch, array_replace($this->options, [
92
            CURLOPT_URL            => $url,
93
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
94
            CURLOPT_RETURNTRANSFER => true,
95
            CURLOPT_HEADER         => true,
96
            CURLOPT_POST           => true,
97
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
98
        ]));
99
        return $ch;
100
    }
101
102
    public function postMultipartOut($endpoint, array $params)
103
    {
104
        $ch = curl_init();
105
        list($url, $extra) = UrlNormalizer::outSplitUrlAndParameters($endpoint);
106
        $params += $extra;
107
        $params = RequestParamValidator::validateMultipartParams($params);
108
        curl_setopt_array($ch, array_replace($this->options, [
109
            CURLOPT_URL            => $url,
110
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForOAuthEcho(),
111
            CURLOPT_RETURNTRANSFER => true,
112
            CURLOPT_HEADER         => true,
113
            CURLOPT_POST           => true,
114
            CURLOPT_POSTFIELDS     => $params,
115
        ]));
116
        return $ch;
117
    }
118
119 11
    public function streaming($endpoint, array $params, StreamHandler $handler)
120 11
    {
121 11
        $ch = curl_init();
122 11
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
123 11
        $params += $extra;
124 11
        $params = RequestParamValidator::validateParams($params);
125 11
        curl_setopt_array($ch, array_replace($this->options, [
126 11
            CURLOPT_URL            => $url,
127 11
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeaders($url, 'POST', $params),
128 11
            CURLOPT_POST           => true,
129 11
            CURLOPT_POSTFIELDS     => http_build_query($params, '', '&'),
130 11
            CURLOPT_HEADERFUNCTION => [$handler, 'headerFunction'],
131 11
            CURLOPT_WRITEFUNCTION  => [$handler, 'writeFunction'],
132
        ]));
133 11
        return $ch;
134
    }
135
136
    public function oauthForRequestToken($oauth_callback = null)
137
    {
138
        if ($oauth_callback !== null) {
139
            $oauth_callback = RequestParamValidator::validateStringable('oauth_callback', $oauth_callback);
140
        }
141
        $ch = curl_init();
142
        curl_setopt_array($ch, array_replace($this->options, [
143
            CURLOPT_URL            => 'https://api.twitter.com/oauth/request_token',
144
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForRequestToken($oauth_callback),
145
            CURLOPT_RETURNTRANSFER => true,
146
            CURLOPT_HEADER         => true,
147
            CURLOPT_POST           => true,
148
        ]));
149
        return $ch;
150
    }
151
152
    public function oauthForAccessToken($oauth_verifier)
153
    {
154
        $oauth_verifier = RequestParamValidator::validateStringable('oauth_verifier', $oauth_verifier);
155
        $ch = curl_init();
156
        curl_setopt_array($ch, array_replace($this->options, [
157
            CURLOPT_URL            => 'https://api.twitter.com/oauth/access_token',
158
            CURLOPT_HTTPHEADER     => $this->credential->getOAuthHeadersForAccessToken($oauth_verifier),
159
            CURLOPT_RETURNTRANSFER => true,
160
            CURLOPT_HEADER         => true,
161
            CURLOPT_POST           => true,
162
        ]));
163
        return $ch;
164
    }
165
166
    public function xauthForAccessToken($username, $password)
167
    {
168
        $username = RequestParamValidator::validateStringable('username', $username);
169
        $password = RequestParamValidator::validateStringable('password', $password);
170
        $ch = curl_init();
171
        curl_setopt_array($ch, array_replace($this->options, [
172
            CURLOPT_URL            => 'https://api.twitter.com/oauth/access_token',
173
            CURLOPT_HTTPHEADER     => $this->credential->getXAuthHeadersForAccessToken($username, $password),
174
            CURLOPT_RETURNTRANSFER => true,
175
            CURLOPT_HEADER         => true,
176
            CURLOPT_POST           => true,
177
            CURLOPT_POSTFIELDS     => http_build_query([
178
                'x_auth_username' => $username,
179
                'x_auth_password' => $password,
180
                'x_auth_mode'     => 'client_auth',
181
            ], '', '&'),
182
        ]));
183
        return $ch;
184
    }
185
186
    public function oauthForBearerToken()
187
    {
188
        $ch = curl_init();
189
        curl_setopt_array($ch, array_replace($this->options, [
190
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/token',
191
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
192
            CURLOPT_RETURNTRANSFER => true,
193
            CURLOPT_HEADER         => true,
194
            CURLOPT_POST           => true,
195
            CURLOPT_POSTFIELDS     => http_build_query([
196
                'grant_type' => 'client_credentials',
197
            ], '', '&'),
198
        ]));
199
        return $ch;
200
    }
201
202
    public function get2($endpoint, $params = [])
203
    {
204
        $ch = curl_init();
205
        list($url, $extra) = UrlNormalizer::twitterSplitUrlAndParameters($endpoint);
206
        $params += $extra;
207
        $params = RequestParamValidator::validateParams($params);
208
        curl_setopt_array($ch, array_replace($this->options, [
209
            CURLOPT_URL            => !$params ? $url : $url . '?' . http_build_query($params, '', '&'),
210
            CURLOPT_HTTPHEADER     => $this->credential->getBearerHeaders(),
211
            CURLOPT_RETURNTRANSFER => true,
212
            CURLOPT_HEADER         => true,
213
            CURLOPT_HTTPGET        => true,
214
        ]));
215
        return $ch;
216
    }
217
218
    public function invalidateBearerToken()
219
    {
220
        $ch = curl_init();
221
        curl_setopt_array($ch, array_replace($this->options, [
222
            CURLOPT_URL            => 'https://api.twitter.com/oauth2/invalidate_token',
223
            CURLOPT_HTTPHEADER     => $this->credential->getBasicHeaders(),
224
            CURLOPT_RETURNTRANSFER => true,
225
            CURLOPT_HEADER         => true,
226
            CURLOPT_POST           => true,
227
            CURLOPT_POSTFIELDS     => http_build_query([
228
                'access_token' => rawurldecode($this->credential->token),
229
            ], '', '&', PHP_QUERY_RFC3986),
230
        ]));
231
        return $ch;
232
    }
233
234
    public function browsing()
235
    {
236
        $ch = curl_init();
237
        curl_setopt_array($ch, array_replace($this->options, [
238
            CURLOPT_COOKIEFILE     => '',
239
            CURLOPT_RETURNTRANSFER => true,
240
            CURLOPT_HEADER         => true,
241
        ]));
242
        return $ch;
243
    }
244
}
245