getConnectorUrl() public static method

Get script url.
Author: Naoki Sawada
public static getConnectorUrl ( ) : string
return string full URL
 /**
  * Prepare
  * Call from elFinder::netmout() before volume->mount().
  *
  * @return array
  *
  * @author Naoki Sawada
  * @author Raja Sharma updating for GoogleDrive
  **/
 public function netmountPrepare($options)
 {
     if (empty($options['client_id']) && defined('ELFINDER_GOOGLEDRIVE_CLIENTID')) {
         $options['client_id'] = ELFINDER_GOOGLEDRIVE_CLIENTID;
     }
     if (empty($options['client_secret']) && defined('ELFINDER_GOOGLEDRIVE_CLIENTSECRET')) {
         $options['client_secret'] = ELFINDER_GOOGLEDRIVE_CLIENTSECRET;
     }
     if (empty($options['googleApiClient']) && defined('ELFINDER_GOOGLEDRIVE_GOOGLEAPICLIENT')) {
         $options['googleApiClient'] = ELFINDER_GOOGLEDRIVE_GOOGLEAPICLIENT;
         include_once $options['googleApiClient'];
     }
     if (!isset($options['pass'])) {
         $options['pass'] = '';
     }
     try {
         $client = new \Google_Client();
         $client->setClientId($options['client_id']);
         $client->setClientSecret($options['client_secret']);
         if ($options['pass'] === 'reauth') {
             $options['pass'] = '';
             $this->session->set('GoogleDriveAuthParams', [])->set('GoogleDriveTokens', []);
         } elseif ($options['pass'] === 'googledrive') {
             $options['pass'] = '';
         }
         $options = array_merge($this->session->get('GoogleDriveAuthParams', []), $options);
         if (!isset($options['access_token'])) {
             $options['access_token'] = $this->session->get('GoogleDriveTokens', []);
             $this->session->remove('GoogleDriveTokens');
         }
         $aToken = $options['access_token'];
         $rootObj = $service = null;
         if ($aToken) {
             try {
                 $client->setAccessToken($aToken);
                 if ($client->isAccessTokenExpired()) {
                     $aToken = array_merge($aToken, $client->fetchAccessTokenWithRefreshToken());
                     $client->setAccessToken($aToken);
                 }
                 $service = new \Google_Service_Drive($client);
                 $rootObj = $service->files->get('root');
                 $options['access_token'] = $aToken;
                 $this->session->set('GoogleDriveAuthParams', $options);
             } catch (Exception $e) {
                 $aToken = [];
                 $options['access_token'] = [];
                 if ($options['user'] !== 'init') {
                     $this->session->set('GoogleDriveAuthParams', $options);
                     return ['exit' => true, 'error' => elFinder::ERROR_REAUTH_REQUIRE];
                 }
             }
         }
         if ($options['user'] === 'init') {
             if (empty($options['url'])) {
                 $options['url'] = elFinder::getConnectorUrl();
             }
             $callback = $options['url'] . '?cmd=netmount&protocol=googledrive&host=1';
             $client->setRedirectUri($callback);
             if (!$aToken && empty($_GET['code'])) {
                 $client->setScopes([Google_Service_Drive::DRIVE]);
                 if (!empty($options['offline'])) {
                     $client->setApprovalPrompt('force');
                     $client->setAccessType('offline');
                 }
                 $url = $client->createAuthUrl();
                 $html = '<input id="elf-volumedriver-googledrive-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: "googledrive", mode: "makebtn"});
                 </script>';
                 if (empty($options['pass']) && $options['host'] !== '1') {
                     $options['pass'] = '******';
                     $this->session->set('GoogleDriveAuthParams', $options);
                     return ['exit' => true, 'body' => $html];
                 } else {
                     $out = ['node' => $options['id'], 'json' => '{"protocol": "googledrive", "mode": "makebtn", "body" : "' . str_replace($html, '"', '\\"') . '", "error" : "' . elFinder::ERROR_ACCESS_DENIED . '"}', 'bind' => 'netmount'];
                     return ['exit' => 'callback', 'out' => $out];
                 }
             } else {
                 if (!empty($_GET['code'])) {
                     $aToken = $client->fetchAccessTokenWithAuthCode($_GET['code']);
                     $options['access_token'] = $aToken;
                     $this->session->set('GoogleDriveTokens', $aToken)->set('GoogleDriveAuthParams', $options);
                     $out = ['node' => $options['id'], 'json' => '{"protocol": "googledrive", "mode": "done", "reset": 1}', 'bind' => 'netmount'];
                     return ['exit' => 'callback', 'out' => $out];
                 }
                 $folders = [];
                 foreach ($service->files->listFiles(['pageSize' => 1000, 'q' => 'trashed = false and mimeType = "application/vnd.google-apps.folder"']) as $f) {
                     $folders[$f->getId()] = $f->getName();
                 }
                 natcasesort($folders);
                 $folders = ['root' => $rootObj->getName()] + $folders;
                 $folders = json_encode($folders);
                 $expires = empty($aToken['refresh_token']) ? $aToken['created'] + $aToken['expires_in'] - 30 : 0;
                 $json = '{"protocol": "googledrive", "mode": "done", "folders": ' . $folders . ', "expires": ' . $expires . '}';
                 $options['pass'] = '******';
                 $html = 'Google.com';
                 $html .= '<script>
                     $("#' . $options['id'] . '").elfinder("instance").trigger("netmount", ' . $json . ');
                 </script>';
                 $this->session->set('GoogleDriveAuthParams', $options);
                 return ['exit' => true, 'body' => $html];
             }
         }
     } catch (Exception $e) {
         $this->session->remove('GoogleDriveAuthParams')->remove('GoogleDriveTokens');
         if (empty($options['pass'])) {
             return ['exit' => true, 'body' => '{msg:' . elFinder::ERROR_ACCESS_DENIED . '}' . ' ' . $e->getMessage()];
         } else {
             return ['exit' => true, 'error' => [elFinder::ERROR_ACCESS_DENIED, $e->getMessage()]];
         }
     }
     if (!$aToken) {
         return ['exit' => true, 'error' => elFinder::ERROR_REAUTH_REQUIRE];
     }
     if ($options['path'] === '/') {
         $options['path'] = 'root';
     }
     try {
         $file = $service->files->get($options['path']);
         $options['alias'] = sprintf($this->options['gdAlias'], $file->getName());
     } catch (Google_Service_Exception $e) {
         $err = json_decode($e->getMessage(), true);
         if (isset($err['error']) && $err['error']['code'] == 404) {
             return ['exit' => true, 'error' => [elFinder::ERROR_TRGDIR_NOT_FOUND, $options['path']]];
         } else {
             return ['exit' => true, 'error' => $e->getMessage()];
         }
     } catch (Exception $e) {
         return ['exit' => true, 'error' => $e->getMessage()];
     }
     foreach (['host', 'user', 'pass', 'id', 'offline'] as $key) {
         unset($options[$key]);
     }
     return $options;
 }
    /**
     * 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;
    }
    /**
     * Prepare
     * Call from elFinder::netmout() before volume->mount().
     *
     * @return array
     *
     * @author Naoki Sawada
     * @author Raja Sharma updating for Box
     **/
    public function netmountPrepare($options)
    {
        if (empty($options['client_id']) && defined('ELFINDER_BOX_CLIENTID')) {
            $options['client_id'] = ELFINDER_BOX_CLIENTID;
        }
        if (empty($options['client_secret']) && defined('ELFINDER_BOX_CLIENTSECRET')) {
            $options['client_secret'] = ELFINDER_BOX_CLIENTSECRET;
        }
        if (isset($options['pass']) && $options['pass'] === 'reauth') {
            $options['user'] = '******';
            $options['pass'] = '';
            $this->session->remove('BoxTokens');
        }
        if (isset($options['id'])) {
            $this->session->set('nodeId', $options['id']);
        } elseif ($_id = $this->session->get('nodeId')) {
            $options['id'] = $_id;
            $this->session->set('nodeId', $_id);
        }
        try {
            if (empty($options['client_id']) || empty($options['client_secret'])) {
                return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
            }
            if (isset($_GET['code'])) {
                try {
                    // Obtain the token using the code received by the Box.com API
                    $this->session->set('BoxTokens', $this->_bd_obtainAccessToken($options['client_id'], $options['client_secret'], $_GET['code']));
                    $out = array('node' => $options['id'], 'json' => '{"protocol": "box", "mode": "done", "reset": 1}', 'bind' => 'netmount');
                    return array('exit' => 'callback', 'out' => $out);
                } catch (Exception $e) {
                    $out = array('node' => $options['id'], 'json' => json_encode(array('error' => $e->getMessage())));
                    return array('exit' => 'callback', 'out' => $out);
                }
            } elseif (!empty($_GET['error'])) {
                $out = array('node' => $options['id'], 'json' => json_encode(array('error' => elFinder::ERROR_ACCESS_DENIED)));
                return array('exit' => 'callback', 'out' => $out);
            }
            if ($options['user'] === 'init') {
                $this->token = $this->session->get('BoxTokens');
                if ($this->token) {
                    try {
                        $this->_bd_refreshToken();
                    } catch (Exception $e) {
                        $this->setError($e->getMessage());
                        $this->token = null;
                        $this->session->remove('BoxTokens');
                    }
                }
                if (empty($this->token)) {
                    $result = null;
                } else {
                    $result = $this->_bd_query('0', $fetch_self = false, $recursive = false);
                }
                if (!$result) {
                    $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 (empty($options['url'])) {
                        $options['url'] = elFinder::getConnectorUrl();
                    }
                    $callback = $options['url'] . '?cmd=netmount&protocol=box&host=box.com&user=init&pass=return&node=' . $options['id'] . $cdata;
                    try {
                        $this->session->set('BoxTokens', (object) array('token' => null));
                        $url = self::AUTH_URL . '?' . http_build_query(array('response_type' => 'code', 'client_id' => $options['client_id'], 'redirect_uri' => elFinder::getConnectorUrl() . '?cmd=netmount&protocol=box&host=1'));
                        $url .= '&oauth_callback=' . rawurlencode($callback);
                    } catch (Exception $e) {
                        return array('exit' => true, 'body' => '{msg:errAccess}');
                    }
                    $html = '<input id="elf-volumedriver-box-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: "box", mode: "makebtn"});
						</script>';
                    return array('exit' => true, 'body' => $html);
                } else {
                    $folders = [];
                    foreach ($result as $res) {
                        if ($res->type == 'folder') {
                            $folders[$res->id . ' '] = $res->name;
                        }
                    }
                    natcasesort($folders);
                    $folders = ['root' => 'My Box'] + $folders;
                    $folders = json_encode($folders);
                    $expires = empty($this->token->data->refresh_token) ? (int) $this->token->expires : 0;
                    $json = '{"protocol": "box", "mode": "done", "folders": ' . $folders . ', "expires": ' . $expires . '}';
                    $html = 'Box.com';
                    $html .= '<script>
							$("#' . $options['id'] . '").elfinder("instance").trigger("netmount", ' . $json . ');
							</script>';
                    return array('exit' => true, 'body' => $html);
                }
            }
        } catch (Exception $e) {
            return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
        }
        if ($_aToken = $this->session->get('BoxTokens')) {
            $options['accessToken'] = json_encode($_aToken);
        } else {
            $this->setError(elFinder::ERROR_NETMOUNT, $options['host'], implode(' ', $this->error()));
            return array('exit' => true, 'error' => $this->error());
        }
        $this->session->remove('nodeId');
        unset($options['user'], $options['pass'], $options['id']);
        return $options;
    }