@ -39,6 +39,7 @@ class Dropbox extends \OC\Files\Storage\Common {
private $root ;
private $id ;
private $metaData = array ();
private $oauth ;
private static $tempFiles = array ();
@ -51,10 +52,10 @@ class Dropbox extends \OC\Files\Storage\Common {
) {
$this -> root = isset ( $params [ 'root' ]) ? $params [ 'root' ] : '' ;
$this -> id = 'dropbox::' . $params [ 'app_key' ] . $params [ 'token' ] . '/' . $this -> root ;
$oauth = new \Dropbox_OAuth_Curl ( $params [ 'app_key' ], $params [ 'app_secret' ]);
$oauth -> setToken ( $params [ 'token' ], $params [ 'token_secret' ]);
$this -> oauth = new \Dropbox_OAuth_Curl ( $params [ 'app_key' ], $params [ 'app_secret' ]);
$this -> oauth -> setToken ( $params [ 'token' ], $params [ 'token_secret' ]);
// note: Dropbox_API connection is lazy
$this -> dropbox = new \Dropbox_API ( $oauth , 'auto' );
$this -> dropbox = new \Dropbox_API ( $this -> oauth , 'auto' );
} else {
throw new \Exception ( 'Creating \OC\Files\Storage\Dropbox storage failed' );
}
@ -248,10 +249,31 @@ class Dropbox extends \OC\Files\Storage\Common {
switch ( $mode ) {
case 'r' :
case 'rb' :
$tmpFile = \OCP\Files :: tmpFile ();
try {
$data = $this -> dropbox -> getFile ( $path );
file_put_contents ( $tmpFile , $data );
// slashes need to stay
$encodedPath = str_replace ( '%2F' , '/' , rawurlencode ( trim ( $path , '/' )));
$downloadUrl = 'https://api-content.dropbox.com/1/files/auto/' . $encodedPath ;
$headers = $this -> oauth -> getOAuthHeader ( $downloadUrl , [], 'GET' );
$client = \OC :: $server -> getHTTPClientService () -> newClient ();
try {
$tmpFile = \OC :: $server -> getTempManager () -> getTemporaryFile ();
$client -> get ( $downloadUrl , [
'headers' => $headers ,
'save_to' => $tmpFile ,
]);
} catch ( RequestException $e ) {
if ( ! is_null ( $e -> getResponse ())) {
if ( $e -> getResponse () -> getStatusCode () === 404 ) {
return false ;
} else {
throw $e ;
}
} else {
throw $e ;
}
}
return fopen ( $tmpFile , 'r' );
} catch ( \Exception $exception ) {
\OCP\Util :: writeLog ( 'files_external' , $exception -> getMessage (), \OCP\Util :: ERROR );