]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - lib/oauthclient.php
Merge branch '0.8.x' into twitter-oauth
[quix0rs-gnu-social.git] / lib / oauthclient.php
1 <?php
2
3 require_once('OAuth.php');
4
5 class OAuthClientCurlException extends Exception { }
6
7 class OAuthClient
8 {
9     var $consumer;
10     var $token;
11
12     function __construct($consumer_key, $consumer_secret,
13                          $oauth_token = null, $oauth_token_secret = null)
14     {
15         $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
16         $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
17         $this->token = null;
18
19         if (isset($oauth_token) && isset($oauth_token_secret)) {
20             $this->token = new OAuthToken($oauth_token, $oauth_token_secret);
21         }
22     }
23
24     function getRequestToken()
25     {
26         $response = $this->oAuthGet(TwitterOAuthClient::$requestTokenURL);
27         parse_str($response);
28         $token = new OAuthToken($oauth_token, $oauth_token_secret);
29         return $token;
30     }
31
32     function getAuthorizeLink($request_token, $oauth_callback = null)
33     {
34         $url = TwitterOAuthClient::$authorizeURL . '?oauth_token=' .
35             $request_token->key;
36
37         if (isset($oauth_callback)) {
38             $url .= '&oauth_callback=' . urlencode($oauth_callback);
39         }
40
41         return $url;
42     }
43
44     function getAccessToken()
45     {
46         $response = $this->oAuthPost(TwitterOAuthClient::$accessTokenURL);
47         parse_str($response);
48         $token = new OAuthToken($oauth_token, $oauth_token_secret);
49         return $token;
50     }
51
52     function oAuthGet($url)
53     {
54         $request = OAuthRequest::from_consumer_and_token($this->consumer,
55             $this->token, 'GET', $url, null);
56         $request->sign_request($this->sha1_method,
57             $this->consumer, $this->token);
58
59         return $this->httpRequest($request->to_url());
60     }
61
62     function oAuthPost($url, $params = null)
63     {
64         $request = OAuthRequest::from_consumer_and_token($this->consumer,
65             $this->token, 'POST', $url, $params);
66         $request->sign_request($this->sha1_method,
67             $this->consumer, $this->token);
68
69         return $this->httpRequest($request->get_normalized_http_url(),
70             $request->to_postdata());
71     }
72
73     function httpRequest($url, $params = null)
74     {
75         $options = array(
76             CURLOPT_RETURNTRANSFER => true,
77             CURLOPT_FAILONERROR    => true,
78             CURLOPT_HEADER         => false,
79             CURLOPT_FOLLOWLOCATION => true,
80             CURLOPT_USERAGENT      => 'Laconica',
81             CURLOPT_CONNECTTIMEOUT => 120,
82             CURLOPT_TIMEOUT        => 120,
83             CURLOPT_HTTPAUTH       => CURLAUTH_ANY,
84             CURLOPT_SSL_VERIFYPEER => false,
85
86             // Twitter is strict about accepting invalid "Expect" headers
87
88             CURLOPT_HTTPHEADER => array('Expect:')
89         );
90
91         if (isset($params)) {
92             $options[CURLOPT_POST] = true;
93             $options[CURLOPT_POSTFIELDS] = $params;
94         }
95
96         $ch = curl_init($url);
97         curl_setopt_array($ch, $options);
98         $response = curl_exec($ch);
99
100         if ($response === false) {
101             $msg  = curl_error($ch);
102             $code = curl_errno($ch);
103             throw new OAuthClientCurlException($msg, $code);
104         }
105
106         curl_close($ch);
107
108         return $response;
109     }
110
111 }