晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/public_html/crm/modules/Google/connectors/ |
Upload File : |
<?php
/* +***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
* *********************************************************************************** */
// Add Zend library path
global $root_directory;
set_include_path($root_directory .'/include' . PATH_SEPARATOR . get_include_path());
vimport('~~/include/Zend/Oauth.php');
vimport('~~/include/Zend/Oauth/Consumer.php');
vimport('~~/include/Zend/Gdata.php');
vimport('~~/include/Zend/Crypt/Rsa/Key/Private.php');
vimport('~~/include/Zend/Gdata/Query.php');
class Google_Oauth_Connector {
var $db = false;
var $userId = false;
protected $_scopes = array(
'Contacts' => 'http://www.google.com/m8/feeds',
'Calendar' => 'http://www.google.com/calendar/feeds',
// ADD MORE...
);
protected $_oauthOptions = array(
'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,
'version' => '1.0',
'consumerKey' => '639253257022.apps.googleusercontent.com',
'consumerSecret' => 'CxnOsnYx_RNyTWVfzTIenmhQ',
'signatureMethod' => 'HMAC-SHA1',
'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken',
'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken',
'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken',
'callbackUrl' => '' // Will be updated at runtime if not specified.
);
function __construct($callbackUrl, $userId = false) {
// if (empty($this->_oauthOptions['callbackUrl'])) {
// $this->_oauthOptions['callbackUrl'] = $this->getCurrentUrl();
// }
self::initializeSchema();
$this->userId = $userId;
$this->_oauthOptions['callbackUrl'] = $callbackUrl;
$this->db = PearDatabase::getInstance();
}
protected function getCurrentUrl() {
global $_SERVER;
/**
* Filter php_self to avoid a security vulnerability.
*/
$php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0, strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
$protocol = 'https://';
} else {
$protocol = 'http://';
}
$host = $_SERVER['HTTP_HOST'];
if ($_SERVER['SERVER_PORT'] != '' &&
(($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
$port = ':' . $_SERVER['SERVER_PORT'];
} else {
$port = '';
}
return $protocol . $host . $port . $php_request_uri;
}
function hasStoredToken($service, $accessToken = false, $requestToken = false) {
if(!$this->userId)
$this->userId = Users_Record_Model::getCurrentUserModel()->getId();
if (!$accessToken && !$requestToken){
$query = "SELECT 1 FROM vtiger_google_oauth WHERE userid=? and service=?";
$params = array($this->userId, $service);
}
else if ($accessToken){
$query = "SELECT access_token FROM vtiger_google_oauth WHERE userid=? and service=? AND access_token<>? AND access_token IS NOT NULL";
$params = array($this->userId, $service, '');
}
else if ($requestToken){
$query = "SELECT request_token FROM vtiger_google_oauth WHERE userid=? and service=? AND request_token<>? AND request_token IS NOT NULL";
$params = array($this->userId, $service, '');
}
$result = $this->db->pquery($query, $params);
if ($this->db->num_rows($result) > 0) {
return true;
}
return false;
}
/**
* TODO:
* Store token-data in DB instead of serializing in session.
* Rebuild object with the token-data stored.
*/
protected function storeAccessToken($service, $token) {
$user = Users_Record_Model::getCurrentUserModel();
$query = "INSERT INTO vtiger_google_oauth(service,access_token,userid) VALUES(?,?,?)";
$params = array($service, base64_encode(serialize($token)), $user->getid());
if (self::hasStoredToken($service, false, true)) {
$query = "UPDATE vtiger_google_oauth SET access_token=? WHERE userid=? AND service=?";
$params = array(base64_encode(serialize($token)), $user->getId(), $service);
}
$this->db->pquery($query, $params);
}
protected function retreiveAccessToken($service) {
if(!$this->userId)
$this->userId = Users_Record_Model::getCurrentUserModel()->getId();
$query = "SELECT access_token FROM vtiger_google_oauth WHERE userid=? AND service =?";
$params = array($this->userId, $service);
$result = $this->db->pquery($query, $params);
$data = $this->db->fetch_array($result);
$token = unserialize(base64_decode($data['access_token']));
return $token;
}
protected function storeRequestToken($service, $token) {
$user = Users_Record_Model::getCurrentUserModel();
$query = "DELETE FROM vtiger_google_oauth where service=? and userid=?";
$this->db->pquery($query, array($service, $user->getId()));
$query = "INSERT INTO vtiger_google_oauth(service,request_token,userid) values(?,?,?)";
$this->db->pquery($query, array($service, base64_encode(serialize($token)), $user->getId()));
}
protected function retrieveRequestToken($service) {
$user = Users_Record_Model::getCurrentUserModel();
$query = "SELECT request_token FROM vtiger_google_oauth WHERE userid=? AND service =?";
$params = array($user->getId(), $service);
$result = $this->db->pquery($query, $params);
$data = $this->db->fetch_array($result);
$token = unserialize(base64_decode($data['request_token']));
return $token;
}
function getHttpClient($service) {
$token = NULL;
if (!$this->hasStoredToken($service, true, false, $this->userId)) {
$consumer = new Zend_Oauth_Consumer($this->_oauthOptions);
if (isset($_GET['oauth_token'])) {
$token = $consumer->getAccessToken($_GET, $this->retrieveRequestToken($service));
$this->storeAccessToken($service, $token);
} else {
$scope = isset($this->_scopes[$service]) ? $this->_scopes[$service] : false;
if ($scope === false) {
throw new Exception("Invalid scope specified");
}
$token = $consumer->getRequestToken(array('scope' => $scope));
$this->storeRequestToken($service, $token);
$consumer->redirect();
exit;
}
} else {
$token = $this->retreiveAccessToken($service);
}
return $token->getHttpClient($this->_oauthOptions);
}
public static function initializeSchema(){
if(!Vtiger_Utils::CheckTable('vtiger_google_oauth')) {
Vtiger_Utils::CreateTable('vtiger_google_oauth',
'(service varchar(64),request_token text,access_token text,userid int)',true);
}
}
}