123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <?php
- if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
- }
- require_once 'OAuth.php';
- class OAuthClientException extends Exception
- {
- }
- class OAuthClient
- {
- var $consumer;
- var $token;
-
- function __construct($consumer_key, $consumer_secret,
- $oauth_token = null, $oauth_token_secret = null)
- {
- $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
- $this->token = null;
- if (isset($oauth_token) && isset($oauth_token_secret)) {
- $this->token = new OAuthToken($oauth_token, $oauth_token_secret);
- }
- }
-
- function getRequestToken($url, $callback = null)
- {
- $params = null;
- if (!is_null($callback)) {
- $params['oauth_callback'] = $callback;
- }
- $response = $this->oAuthGet($url, $params);
- $arr = array();
- parse_str($response, $arr);
- $token = $arr['oauth_token'];
- $secret = $arr['oauth_token_secret'];
- $confirm = $arr['oauth_callback_confirmed'];
- if (isset($token) && isset($secret)) {
- $token = new OAuthToken($token, $secret);
- if (isset($confirm)) {
- if ($confirm == 'true') {
- return $token;
- } else {
- throw new OAuthClientException(
- 'Callback was not confirmed by remote OAuth side.'
- );
- }
- }
- return $token;
- } else {
- throw new OAuthClientException(
- 'Could not get a request token from remote OAuth side.'
- );
- }
- }
-
- function getAuthorizeLink($url, $request_token)
- {
- $authorize_url = $url . '?oauth_token=' .
- $request_token->key;
- return $authorize_url;
- }
-
- function getAccessToken($url, $verifier = null)
- {
- $params = array();
- if (!is_null($verifier)) {
- $params['oauth_verifier'] = $verifier;
- }
- $response = $this->oAuthPost($url, $params);
- $arr = array();
- parse_str($response, $arr);
- $token = $arr['oauth_token'];
- $secret = $arr['oauth_token_secret'];
- if (isset($token) && isset($secret)) {
- $token = new OAuthToken($token, $secret);
- return $token;
- } else {
- throw new OAuthClientException(
- 'Could not get a access token from remote OAuth side.'
- );
- }
- }
-
- function oAuthGet($url, $params = null)
- {
- $request = OAuthRequest::from_consumer_and_token($this->consumer,
- $this->token, 'GET', $url, $params);
- $request->sign_request($this->sha1_method,
- $this->consumer, $this->token);
- return $this->httpRequest($request->to_url());
- }
-
- function oAuthPost($url, $params = null)
- {
- $request = OAuthRequest::from_consumer_and_token($this->consumer,
- $this->token, 'POST', $url, $params);
- $request->sign_request($this->sha1_method,
- $this->consumer, $this->token);
- return $this->httpRequest($request->get_normalized_http_url(),
- $request->to_postdata());
- }
-
- function httpRequest($url, $params = null)
- {
- $request = new HTTPClient($url);
- $request->setConfig(array(
- 'connect_timeout' => 120,
- 'timeout' => 120,
- 'follow_redirects' => true,
- 'ssl_verify_peer' => false,
- 'ssl_verify_host' => false
- ));
-
-
-
- if (isset($params)) {
- $request->setMethod(HTTP_Request2::METHOD_POST);
- $request->setBody($params);
- }
- try {
- $response = $request->send();
- $code = $response->getStatus();
- if ($code < 200 || $code >= 400) {
- throw new OAuthClientException($response->getBody(), $code);
- }
- return $response->getBody();
- } catch (Exception $e) {
- throw new OAuthClientException($e->getMessage(), $e->getCode());
- }
- }
- }
|