www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > plugins/passport/passport.phpwind.php

    <?php
class passport_phpwind extends modelFactory {

	var $passport_name = "PhpWind论坛V6.3.2";
	var $passport_memo = "此功能可进行第三方系统(譬如论坛系统)用户同步与登录同步设置(Phpwind论坛最新版本已内置本系统接口,其它系统请根据文档自行编写);";
	var $_config = null;
	var $forward = 0;
	function setConfig($config) {
		$this->_config = $config;
	}
  
	function verifylogin($login,$passwd){

	}

	function decode($responseData){

	}

	function getoptions(){
		return array(
			'URL'=>array('label'=>'论坛系统URL:','type'=>'input'),
			'PrivateKey'=>array('label'=>'连接私钥:','type'=>'input'),
			'encoding'=>array('label'=>'论坛系统编码:','type'=>'select','options'=>array('utf8' => '国际化编码(utf-8)','zh' => '简体中文','big5' => '繁体中文','en' => '英文')),
            'conntype'=>array('label'=>'本网站作为:','type'=>'radio','options'=>array('service'=>'服务器端','client'=>'客户端'))
		);
	}

	function login($userId, $rurl) {
		$oMember = $this->system->loadModel('member/member');
		$aMember = $oMember->getFieldById($userId);
		$username = $aMember['uname'];

		if (true || $SITE_EODING=="UTF-8"){
			if($this->_config['encoding']!='utf8'){
				$charset = $this->system->loadModel('utility/charset');
				$username = $charset->utf2local($username,$this->_config['encoding']);
			}
		}

		$member = array(
			'username'	=> $username,
			'password'	=> $aMember['password'],
			'email'		=> $aMember['email'], 
			'time'		=> time()
		);
		$userdb_encode='';
		foreach($member as $key=>$val){
			$userdb_encode .= $userdb_encode ? "&$key=$val" : "$key=$val";
		}	
		$key = $this->_config['PrivateKey'];
		$this->db_hash = $key;
		$userdb_encode=str_replace('=','',$this->_StrCode($userdb_encode));
		$forward = $rurl; 
		$verify = md5("login$userdb_encode$forward$key");
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."passport_client.php":$this->_config['URL'];
		header('Location: '.$shop_loginapi_url.'?action=login&userdb='.rawurlencode($userdb_encode).'&forward='.$forward.'&verify='.$verify);	
		exit;
	}
	
	function regist($userId,$rurl) {
		$oMember = $this->system->loadModel('member/member');
		$aMember = $oMember->getFieldById($userId);
		$username = $aMember['uname'];
		if($this->_config['encoding']!='utf8'){
			$charset = $this->system->loadModel('utility/charset');
			$username = $charset->utf2local($username,$this->_config['encoding']);
		}
		$member = array(	
			'username'	=> $username,
			'password'	=> $aMember['password'],
			'email'		=> $aMember['email'], 
			'time'		=> $aMember['regtime']
		);
		$userdb_encode='';
		foreach($member as $key=>$val){
			$userdb_encode .= $userdb_encode ? "&$key=$val" : "$key=$val";
		}	
		$key = $this->_config['PrivateKey'];
		$this->db_hash=$key;
		$userdb_encode=str_replace('=','',$this->_StrCode($userdb_encode));
		$forward = $rurl;
		$verify = md5("login$userdb_encode$forward$key");
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."passport_client.php":$this->_config['URL'];
		$phpWindUrl = $shop_loginapi_url.'?action=login&userdb='.rawurlencode($userdb_encode).'&forward='.rawurlencode($rurl).'&verify='.$verify;	
		header('Location: '.$shop_loginapi_url.'?action=login&userdb='.rawurlencode($userdb_encode).'&forward='.$forward.'&verify='.$verify);
		exit;
	}		

	function logout($userId,$rurl) {
		$key = $this->_config['PrivateKey'];
		$this->db_hash=$key;
		$userdb_encode=str_replace('=','',$this->_StrCode($userdb_encode));
		$forward = $rurl;
		$verify = md5("quit$userdb_encode$forward$key");
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."passport_client.php":$this->_config['URL'];
		header('Location: '.$shop_loginapi_url.'?action=quit&forward='.$forward."&verify=$verify");
		exit;
	}

	function _StrCode($string,$action='ENCODE'){
		$key	= substr(md5($_SERVER["HTTP_USER_AGENT"].$this->db_hash),8,18);
		$string	= $action == 'ENCODE' ? $string : base64_decode($string);
		$len	= strlen($key);
		$code	= '';
		for($i=0; $i<strlen($string); $i++){
			$k		= $i % $len;
			$code  .= $string[$i] ^ $key[$k];
		}
		$code = $action == 'DECODE' ? $code : base64_encode($code);
		return $code;
	}
    
    function ClientUserAction($action,$userdb,$forward=''){
        parse_str($this->StrCode($userdb,'DECODE'),$userdb);
        if ($this->_config['encoding']!="utf8"){
           $charset = $this->system->loadModel('utility/charset');
           foreach($userdb as $key => $val){
              $userdb[$key] = $charset->local2utf($val,$this->_config['encoding']);
           }
        } 
        $account = $this->system->loadModel('member/account');
        $account->PluginUserManage($action,$userdb,$forward);
        if ($action=="login"){
            if ($forward){
                header('Location:'.$forward);
            }
            else{
                if ($_COOKIE['FromPlace']){
                    setcookie("FromPlace",'');
                    header("Location:./index.php"); 
                }
                else
                    header("Location:".$this->_config['URL']."index.php");
            }
        } 
        else
            header("Location:".$forward);
        exit;
    }  
    function StrCode($string,$action='ENCODE'){
        $this->db_hash = $this->_config['PrivateKey'];
        $action != 'ENCODE' && $string = base64_decode($string);
        $code = '';
        $key  = substr(md5($_SERVER['HTTP_USER_AGENT'].$this->db_hash),8,18);
        $keylen = strlen($key); $strlen = strlen($string);
        for ($i=0;$i<$strlen;$i++) {
            $k		= $i % $keylen;
            $code  .= $string[$i] ^ $key[$k];
        }
        return ($action!='DECODE' ? base64_encode($code) : $code);
    }
    function ServerClient($action){
        setCookie('FromPlace','shopEx');
        if ($this->_config['conntype']=="client"){
            switch ($action){
                case "signup":
                    $toUrl='register.php';
                    break;
                case "login":
                    $toUrl='login.php';
                    break;                    
                case "logout":                  
                    $toUrl='login.php?action=quit';
                    break;
                case "security":
                    $toUrl="profile.php?action=modify";
                    break;
            }
            $url = $this->_config['URL'].$toUrl;
            header("Location:".$url);
            exit;
        }
    }
}
?>