2013-08-17 16:20:20 +00:00
|
|
|
<?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
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class is an abstract OAuth class.
|
|
|
|
*
|
|
|
|
* It must be extended by classes who wish to provide OAuth functionality
|
|
|
|
* using different libraries.
|
|
|
|
*/
|
|
|
|
abstract class Dropbox_OAuth {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* After a user has authorized access, dropbox can redirect the user back
|
|
|
|
* to this url.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
public $authorizeCallbackUrl = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uri used to fetch request tokens
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
const URI_REQUEST_TOKEN = 'https://api.dropbox.com/1/oauth/request_token';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uri used to redirect the user to for authorization.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
const URI_AUTHORIZE = 'https://www.dropbox.com/1/oauth/authorize';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uri used to
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
const URI_ACCESS_TOKEN = 'https://api.dropbox.com/1/oauth/access_token';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An OAuth request token.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $oauth_token = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* OAuth token secret
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $oauth_token_secret = null;
|
|
|
|
|
2015-04-01 13:25:11 +00:00
|
|
|
/**
|
|
|
|
* Get OAuth request last responce
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected $lastResponse = array();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Input file stream pointer or file path for PUT method
|
|
|
|
*
|
|
|
|
* @var resource|string
|
|
|
|
*/
|
|
|
|
protected $inFile = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Input file size for PUT method
|
|
|
|
*
|
|
|
|
* @var resource | string
|
|
|
|
*/
|
|
|
|
protected $inFileSize = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is support PUT method on OAuth consumer
|
|
|
|
*
|
|
|
|
* @var bool
|
|
|
|
*/
|
|
|
|
protected $putSupported = false;
|
|
|
|
|
2013-08-17 16:20:20 +00:00
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*
|
|
|
|
* @param string $consumerKey
|
|
|
|
* @param string $consumerSecret
|
|
|
|
*/
|
|
|
|
abstract public function __construct($consumerKey, $consumerSecret);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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) {
|
|
|
|
|
|
|
|
if (is_array($token)) {
|
|
|
|
$this->oauth_token = $token['token'];
|
|
|
|
$this->oauth_token_secret = $token['token_secret'];
|
|
|
|
} else {
|
|
|
|
$this->oauth_token = $token;
|
|
|
|
$this->oauth_token_secret = $token_secret;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the oauth request tokens as an associative array.
|
|
|
|
*
|
|
|
|
* The array will contain the elements 'token' and 'token_secret'.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getToken() {
|
|
|
|
|
|
|
|
return array(
|
|
|
|
'token' => $this->oauth_token,
|
|
|
|
'token_secret' => $this->oauth_token_secret,
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the authorization url
|
|
|
|
*
|
|
|
|
* @param string $callBack Specify a callback url to automatically redirect the user back
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getAuthorizeUrl($callBack = null) {
|
|
|
|
|
|
|
|
// Building the redirect uri
|
|
|
|
$token = $this->getToken();
|
|
|
|
$uri = self::URI_AUTHORIZE . '?oauth_token=' . $token['token'];
|
|
|
|
if ($callBack) $uri.='&oauth_callback=' . $callBack;
|
|
|
|
return $uri;
|
|
|
|
}
|
|
|
|
|
2015-04-01 13:25:11 +00:00
|
|
|
/**
|
|
|
|
* Set input file for PUT method
|
|
|
|
*
|
|
|
|
* @param resource|string $file
|
|
|
|
* @throws Dropbox_Exception
|
|
|
|
*/
|
|
|
|
public function setInfile($file) {
|
|
|
|
if (is_resource($file)) {
|
|
|
|
$stat = fstat($file);
|
|
|
|
$this->inFileSize = $stat['size'];
|
|
|
|
} else if (is_string($file) && is_readable($file)) {
|
|
|
|
$this->inFileSize = filesize($file);
|
|
|
|
$file = fopen($file, 'rb');
|
|
|
|
}
|
|
|
|
if (!is_resource($file)) {
|
|
|
|
throw new Dropbox_Exception('File must be a file-resource or a string');
|
|
|
|
}
|
|
|
|
$this->inFile = $file;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return is PUT method supported
|
|
|
|
*
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public function isPutSupport() {
|
|
|
|
return $this->putSupported;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get last request response
|
|
|
|
*
|
|
|
|
* @return array:
|
|
|
|
*/
|
|
|
|
public function getLastResponse() {
|
|
|
|
return $this->lastResponse;
|
|
|
|
}
|
|
|
|
|
2013-08-17 16:20:20 +00:00
|
|
|
/**
|
|
|
|
* 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 abstract function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array());
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requests the OAuth request token.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
abstract public function getRequestToken();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Requests the OAuth access tokens.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
abstract public function getAccessToken();
|
|
|
|
|
|
|
|
}
|