/**
     * Prepare
     * Call from elFinder::netmout() before volume->mount()
     *
     * @param $options
     * @return Array
     * @author Naoki Sawada
     */
    public function netmountPrepare($options)
    {
        if (empty($options['consumerKey']) && defined('ELFINDER_DROPBOX_CONSUMERKEY')) {
            $options['consumerKey'] = ELFINDER_DROPBOX_CONSUMERKEY;
        }
        if (empty($options['consumerSecret']) && defined('ELFINDER_DROPBOX_CONSUMERSECRET')) {
            $options['consumerSecret'] = ELFINDER_DROPBOX_CONSUMERSECRET;
        }
        if ($options['user'] === 'init') {
            if (!$this->dropbox_phpFound || empty($options['consumerKey']) || empty($options['consumerSecret']) || !class_exists('PDO', false)) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if (defined('ELFINDER_DROPBOX_USE_CURL_PUT')) {
                $this->oauth = new Dropbox_OAuth_Curl($options['consumerKey'], $options['consumerSecret']);
            } else {
                if (class_exists('OAuth', false)) {
                    $this->oauth = new Dropbox_OAuth_PHP($options['consumerKey'], $options['consumerSecret']);
                } else {
                    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', false)) {
                        $this->oauth = new Dropbox_OAuth_PEAR($options['consumerKey'], $options['consumerSecret']);
                    }
                }
            }
            if (!$this->oauth) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if ($options['pass'] === 'init') {
                $html = '';
                if ($sessionToken = $this->session->get('DropboxTokens')) {
                    // token check
                    try {
                        list(, $accessToken, $accessTokenSecret) = $sessionToken;
                        $this->oauth->setToken($accessToken, $accessTokenSecret);
                        $this->dropbox = new Dropbox_API($this->oauth, $this->options['root']);
                        $this->dropbox->getAccountInfo();
                        $script = '<script>
							$("#' . $options['id'] . '").elfinder("instance").trigger("netmount", {protocol: "dropbox", mode: "done"});
						</script>';
                        $html = $script;
                    } catch (Dropbox_Exception $e) {
                        $this->session->remove('DropboxTokens');
                    }
                }
                if (!$html) {
                    // get customdata
                    $cdata = '';
                    $innerKeys = array('cmd', 'host', 'options', 'pass', 'protocol', 'user');
                    $this->ARGS = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;
                    foreach ($this->ARGS as $k => $v) {
                        if (!in_array($k, $innerKeys)) {
                            $cdata .= '&' . $k . '=' . rawurlencode($v);
                        }
                    }
                    if (strpos($options['url'], 'http') !== 0) {
                        $options['url'] = elFinder::getConnectorUrl();
                    }
                    $callback = $options['url'] . '?cmd=netmount&protocol=dropbox&host=dropbox.com&user=init&pass=return&node=' . $options['id'] . $cdata;
                    try {
                        $tokens = $this->oauth->getRequestToken();
                        $url = $this->oauth->getAuthorizeUrl(rawurlencode($callback));
                    } catch (Dropbox_Exception $e) {
                        return array('exit' => true, 'body' => '{msg:errAccess}');
                    }
                    $this->session->set('DropboxAuthTokens', $tokens);
                    $html = '<input id="elf-volumedriver-dropbox-host-btn" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" value="{msg:btnApprove}" type="button" onclick="window.open(\'' . $url . '\')">';
                    $html .= '<script>
						$("#' . $options['id'] . '").elfinder("instance").trigger("netmount", {protocol: "dropbox", mode: "makebtn"});
					</script>';
                }
                return array('exit' => true, 'body' => $html);
            } else {
                $this->oauth->setToken($this->session->get('DropboxAuthTokens'));
                $this->session->remove('DropboxAuthTokens');
                $tokens = $this->oauth->getAccessToken();
                $this->session->set('DropboxTokens', array($_GET['uid'], $tokens['token'], $tokens['token_secret']));
                $out = array('node' => $_GET['node'], 'json' => '{"protocol": "dropbox", "mode": "done"}', 'bind' => 'netmount');
                return array('exit' => 'callback', 'out' => $out);
            }
        }
        if ($sessionToken = $this->session->get('DropboxTokens')) {
            list($options['dropboxUid'], $options['accessToken'], $options['accessTokenSecret']) = $sessionToken;
        }
        unset($options['user'], $options['pass']);
        return $options;
    }
Ejemplo n.º 2
0
    /**
    * Prepare
    * Call from elFinder::netmout() before volume->mount()
    *
    * @return Array
    * @author Naoki Sawada
    **/
    public function netmountPrepare($options)
    {
        if (empty($options['consumerKey']) && defined('ELFINDER_DROPBOX_CONSUMERKEY')) {
            $options['consumerKey'] = ELFINDER_DROPBOX_CONSUMERKEY;
        }
        if (empty($options['consumerSecret']) && defined('ELFINDER_DROPBOX_CONSUMERSECRET')) {
            $options['consumerSecret'] = ELFINDER_DROPBOX_CONSUMERSECRET;
        }
        if (true || $options['user'] === 'init') {
            if (empty($options['consumerKey']) || empty($options['consumerSecret'])) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            set_include_path($_SERVER['DOCUMENT_ROOT'] . $_SESSION['QOOL_FOLDER'] . 'lib/');
            require_once "Dropbox/OAuth/Zend.php";
            $this->oauth = new Dropbox_OAuth_Zend($options['consumerKey'], $options['consumerSecret']);
            if (!$this->oauth) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if (true || $options['pass'] === 'init') {
                $html = '';
                if (isset($_SESSION['elFinderDropboxTokens'])) {
                    // token check
                    try {
                        list(, $accessToken, $accessTokenSecret) = $_SESSION['elFinderDropboxTokens'];
                        $this->oauth->setToken($accessToken, $accessTokenSecret);
                        $this->dropbox = new Dropbox_API($this->oauth, $this->options['root']);
                        $this->dropbox->getAccountInfo();
                        $script = '<script>
$("#elfinder-cmd-netmout-dropbox-host").html("Dropbox.com");
$("#elfinder-cmd-netmout-dropbox-user").val("done");
$("#elfinder-cmd-netmout-dropbox-pass").val("done");
</script>';
                        $html = 'Dropbox.com' . $script;
                    } catch (Dropbox_Exception $e) {
                        unset($_SESSION['elFinderDropboxTokens']);
                    }
                }
                if (!$html) {
                    if (strpos($options['url'], 'http') !== 0) {
                        $options['url'] = $this->getConnectorUrl();
                    }
                    $callback = $options['url'] . '?cmd=netmount&protocol=dropbox&host=dropbox.com&user=init&pass=return';
                    try {
                        $tokens = $this->oauth->getRequestToken();
                        $url = $this->oauth->getAuthorizeUrl(rawurlencode($callback));
                    } catch (Dropbox_Exception $e) {
                        return array('exit' => true, 'body' => '{msg:errAccess}');
                    }
                    $_SESSION['elFinderDropboxAuthTokens'] = $tokens;
                    $html = '<input class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" value="{msg:btnApprove}" type="button" onclick="window.open(\'' . $url . '\')">';
                }
                return array('exit' => true, 'body' => $html);
            } else {
                $this->oauth->setToken($_SESSION['elFinderDropboxAuthTokens']);
                unset($_SESSION['elFinderDropboxAuthTokens']);
                $tokens = $this->oauth->getAccessToken();
                $_SESSION['elFinderDropboxTokens'] = array($_GET['uid'], $tokens['token'], $tokens['token_secret']);
                $script = '
var p = window.opener;
p.$("#elfinder-cmd-netmout-dropbox-host").html("Dropbox.com");
p.$("#elfinder-cmd-netmout-dropbox-user").val("done");
p.$("#elfinder-cmd-netmout-dropbox-pass").val("done");
window.close();';
                $out = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>' . $script . '</script></head><body><a href="#" onlick="window.close();return false;">Close this window</a></body></html>';
                while (ob_get_level()) {
                    if (!ob_end_clean()) {
                        break;
                    }
                }
                header('Content-Type: text/html; charset=utf-8');
                header('Content-Length: ' . strlen($out));
                header('Cache-Control: private');
                header('Pragma: no-cache');
                echo $out;
                exit;
            }
        }
        if (isset($_SESSION['elFinderDropboxTokens'])) {
            list($options['dropboxUid'], $options['accessToken'], $options['accessTokenSecret']) = $_SESSION['elFinderDropboxTokens'];
        }
        unset($options['user'], $options['pass']);
        return $options;
    }
    /**
     * Prepare
     * Call from elFinder::netmout() before volume->mount()
     *
     * @return Array
     * @author Naoki Sawada
     **/
    public function netmountPrepare($options)
    {
        if (empty($options['consumerKey']) && defined('ELFINDER_DROPBOX_CONSUMERKEY')) {
            $options['consumerKey'] = ELFINDER_DROPBOX_CONSUMERKEY;
        }
        if (empty($options['consumerSecret']) && defined('ELFINDER_DROPBOX_CONSUMERSECRET')) {
            $options['consumerSecret'] = ELFINDER_DROPBOX_CONSUMERSECRET;
        }
        if ($options['user'] === 'init') {
            if (!$this->dropbox_phpFound || empty($options['consumerKey']) || empty($options['consumerSecret'])) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if (class_exists('OAuth')) {
                $this->oauth = new Dropbox_OAuth_PHP($options['consumerKey'], $options['consumerSecret']);
            } else {
                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')) {
                    $this->oauth = new Dropbox_OAuth_PEAR($options['consumerKey'], $options['consumerSecret']);
                }
            }
            if (!$this->oauth) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if ($options['pass'] === 'init') {
                $html = '';
                if (isset($_SESSION['elFinderDropboxTokens'])) {
                    // token check
                    try {
                        list(, $accessToken, $accessTokenSecret) = $_SESSION['elFinderDropboxTokens'];
                        $this->oauth->setToken($accessToken, $accessTokenSecret);
                        $this->dropbox = new Dropbox_API($this->oauth, $this->options['root']);
                        $this->dropbox->getAccountInfo();
                        $script = '<script>
							$("#elfinder-cmd-netmout-dropbox-host").html("Dropbox.com");
							$("#elfinder-cmd-netmout-dropbox-user").val("done");
							$("#elfinder-cmd-netmout-dropbox-pass").val("done");
						</script>';
                        $html = 'Dropbox.com' . $script;
                    } catch (Dropbox_Exception $e) {
                        unset($_SESSION['elFinderDropboxTokens']);
                    }
                }
                if (!$html) {
                    // get customdata
                    $cdata = '';
                    $innerKeys = array('cmd', 'host', 'options', 'pass', 'protocol', 'user');
                    $post = strtolower($_SERVER['REQUEST_METHOD']) === 'post' ? $_POST : $_GET;
                    foreach ($post as $k => $v) {
                        if (!in_array($k, $innerKeys)) {
                            $cdata .= '&' . $k . '=' . rawurlencode($v);
                        }
                    }
                    if (strpos($options['url'], 'http') !== 0) {
                        $options['url'] = $this->getConnectorUrl();
                    }
                    $callback = $options['url'] . '?cmd=netmount&protocol=dropbox&host=dropbox.com&user=init&pass=return' . $cdata;
                    try {
                        $tokens = $this->oauth->getRequestToken();
                        $url = $this->oauth->getAuthorizeUrl(rawurlencode($callback));
                    } catch (Dropbox_Exception $e) {
                        return array('exit' => true, 'body' => '{msg:errAccess}');
                    }
                    $_SESSION['elFinderDropboxAuthTokens'] = $tokens;
                    $html = '<input class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" value="{msg:btnApprove}" type="button" onclick="window.open(\'' . $url . '\')">';
                }
                return array('exit' => true, 'body' => $html);
            } else {
                $this->oauth->setToken($_SESSION['elFinderDropboxAuthTokens']);
                unset($_SESSION['elFinderDropboxAuthTokens']);
                $tokens = $this->oauth->getAccessToken();
                $_SESSION['elFinderDropboxTokens'] = array($_GET['uid'], $tokens['token'], $tokens['token_secret']);
                $script = '
					var p = window.opener;
					p.$("#elfinder-cmd-netmout-dropbox-host").html("Dropbox.com");
					p.$("#elfinder-cmd-netmout-dropbox-user").val("done");
					p.$("#elfinder-cmd-netmout-dropbox-pass").val("done");
					window.close();';
                $out = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>' . $script . '</script></head><body><a href="#" onlick="window.close();return false;">Close this window</a></body></html>';
                while (ob_get_level()) {
                    if (!ob_end_clean()) {
                        break;
                    }
                }
                header('Content-Type: text/html; charset=utf-8');
                header('Content-Length: ' . strlen($out));
                header('Cache-Control: private');
                header('Pragma: no-cache');
                echo $out;
                exit;
            }
        }
        if (isset($_SESSION['elFinderDropboxTokens'])) {
            list($options['dropboxUid'], $options['accessToken'], $options['accessTokenSecret']) = $_SESSION['elFinderDropboxTokens'];
        }
        unset($options['user'], $options['pass']);
        return $options;
    }