123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- /**
- * Dropbox OAuth
- *
- * @package Dropbox
- * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/)
- * @license http://code.google.com/p/dropbox-php/wiki/License MIT
- */
- if (!class_exists('HTTP_OAuth_Consumer')) {
- // We're going to try to load in manually
- include 'HTTP/OAuth/Consumer.php';
- }
- if (!class_exists('HTTP_OAuth_Consumer'))
- throw new Dropbox_Exception('The HTTP_OAuth_Consumer class could not be found! Did you install the pear HTTP_OAUTH class?');
- /**
- * This class is used to sign all requests to dropbox
- *
- * This classes use the PEAR HTTP_OAuth package. Make sure this is installed.
- */
- class Dropbox_OAuth_PEAR extends Dropbox_OAuth {
- /**
- * OAuth object
- *
- * @var OAuth
- */
- protected $oAuth;
- /**
- * OAuth consumer key
- *
- * We need to keep this around for later.
- *
- * @var string
- */
- protected $consumerKey;
- /**
- * Constructor
- *
- * @param string $consumerKey
- * @param string $consumerSecret
- */
- public function __construct($consumerKey, $consumerSecret)
- {
- $this->OAuth = new Dropbox_OAuth_Consumer_Dropbox($consumerKey, $consumerSecret);
- $this->consumerKey = $consumerKey;
- }
- /**
- * Sets the request token and secret.
- *
- * The tokens can also be passed as an array into the first argument.
- * The array must have the elements token and token_secret.
- *
- * @param string|array $token
- * @param string $token_secret
- * @return void
- */
- public function setToken($token, $token_secret = null) {
- parent::setToken($token,$token_secret);
- $this->OAuth->setToken($this->oauth_token);
- $this->OAuth->setTokenSecret($this->oauth_token_secret);
- }
- /**
- * Fetches a secured oauth url and returns the response body.
- *
- * @param string $uri
- * @param mixed $arguments
- * @param string $method
- * @param array $httpHeaders
- * @return string
- */
- public function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array())
- {
- $httpRequest = new HTTP_Request2(null,
- HTTP_Request2::METHOD_GET,
- array(
- 'ssl_verify_peer' => false,
- 'ssl_verify_host' => false
- )
- );
- $consumerRequest = new HTTP_OAuth_Consumer_Request();
- $consumerRequest->accept($httpRequest);
- $consumerRequest->setUrl($uri);
- $consumerRequest->setMethod($method);
- $consumerRequest->setSecrets($this->OAuth->getSecrets());
-
- $parameters = array(
- 'oauth_consumer_key' => $this->consumerKey,
- 'oauth_signature_method' => 'HMAC-SHA1',
- 'oauth_token' => $this->oauth_token,
- );
- if (is_array($arguments)) {
- $parameters = array_merge($parameters,$arguments);
- } elseif (is_string($arguments)) {
- $consumerRequest->setBody($arguments);
- }
- $consumerRequest->setParameters($parameters);
- if (count($httpHeaders)) {
- foreach($httpHeaders as $k=>$v) {
- $consumerRequest->setHeader($k, $v);
- }
- }
- $response = $consumerRequest->send();
- switch($response->getStatus()) {
- // Not modified
- case 304 :
- return array(
- 'httpStatus' => 304,
- 'body' => null,
- );
- break;
- case 400 :
- throw new Dropbox_Exception_Forbidden('Forbidden. Bad input parameter. Error message should indicate which one and why.');
- case 401 :
- throw new Dropbox_Exception_Forbidden('Forbidden. Bad or expired token. This can happen if the user or Dropbox revoked or expired an access token. To fix, you should re-authenticate the user.');
- case 403 :
- throw new Dropbox_Exception_Forbidden('Forbidden. This could mean a bad OAuth request, or a file or folder already existing at the target location.');
- case 404 :
- throw new Dropbox_Exception_NotFound('Resource at uri: ' . $uri . ' could not be found');
- case 405 :
- throw new Dropbox_Exception_Forbidden('Forbidden. Request method not expected (generally should be GET or POST).');
- case 500 :
- throw new Dropbox_Exception_Forbidden('Server error. ' . $e->getMessage());
- case 503 :
- throw new Dropbox_Exception_Forbidden('Forbidden. Your app is making too many requests and is being rate limited. 503s can trigger on a per-app or per-user basis.');
- case 507 :
- throw new Dropbox_Exception_OverQuota('This dropbox is full');
-
- }
- return array(
- 'httpStatus' => $response->getStatus(),
- 'body' => $response->getBody()
- );
- }
- /**
- * Requests the OAuth request token.
- *
- * @return void
- */
- public function getRequestToken() {
-
- $this->OAuth->getRequestToken(self::URI_REQUEST_TOKEN);
- $this->setToken($this->OAuth->getToken(), $this->OAuth->getTokenSecret());
- return $this->getToken();
- }
- /**
- * Requests the OAuth access tokens.
- *
- * This method requires the 'unauthorized' request tokens
- * and, if successful will set the authorized request tokens.
- *
- * @return void
- */
- public function getAccessToken() {
- $this->OAuth->getAccessToken(self::URI_ACCESS_TOKEN);
- $this->setToken($this->OAuth->getToken(), $this->OAuth->getTokenSecret());
- return $this->getToken();
- }
- }
|