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

    <?php
class passport_discuz extends modelFactory {

	var $passport_name = "Discuz论坛V6.0";
	var $passport_memo = "";
	var $_config = null;
	var $forward=1;
	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' => '英文')),
		);
	}

	/**
	*	CHECK DISCUZ INPUT KEY
	*/
	function validKey(){
		$passport_key = $this->system->getConf('plugin.passport.discuz.config.PrivateKey');
		if($_GET['verify'] != md5($_GET['action'].$_GET['auth'].$_GET['forward'].$passport_key)) {
			return false;
		}
		return $passport_key;
	}


	function ssoSignin(){
		/*
		* discuz sign in 
		*/
		switch($_GET['action'] ){
			case 'login':
				return $this->ssoLogin();
			case 'logout':
				return $this->ssoLoginOut();
		}
	}
	
	function ssoLoginOut(){
		return false;
	}
	function ssoLogin(){
		$passport_key=$this->validKey();
		if(!$passport_key){
			return false;
		}
		$oPassport = $this->system->loadModel('member/passport');
		parse_str($oPassport->passport_decrypt($_GET['auth'], $passport_key), $member);
		if (true || $SITE_EODING=="UTF-8"){
			if($this->_config['encoding']!='utf8'){
				$charset = $this->system->loadModel('utility/charset');
				foreach($member as $index => $value){
					$member[$index] = $charset->local2utf($value);
				}
			}
		}		
		$memberObj = $this->system->loadModel('member/account');
		$info=$memberObj->verifyPassportLogin($member);
		if(!$info){
			$info = $memberObj->createPassport($member);
			if(!$info){
				return false;
			}
			return $memberObj->toLogin($member);
		}
		return $memberObj->toLogin($member);

	}



	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'){
				$username = utf2local($username,$this->_config['encoding']);
			}
		}

		$member = array(
			'cookietime'	=> 31536000,
			'time'		=> time(),
			'username'	=> $username,
			'password'	=> $aMember['password'],
			'gender'	=> $aMember['sex'],
			'email'		=> $aMember['email'],
			'credits'	=> $aMember['point'],
			'regip'		=> $aMember['reg_ip'],
			'regdate'	=> $aMember['regtime'],
			'qq'        => ''
		);
		
		$auth = passport_encrypt(passport_encode($member), $this->_config['PrivateKey']);
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."api/shopex.php":$this->_config['URL'];
		header('Location: '.$shop_loginapi_url.'?action=login&auth='.rawurlencode($auth).'&forward='.rawurlencode($rurl).'&verify='.md5('login'.$auth.$rurl.$this->_config['PrivateKey']));
		exit;
	}

	function regist($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'){
				$username = utf2local($username,$this->_config['encoding']);
			}
		}

		$member = array(
			'cookietime'	=> 31536000,
			'time'		=> time(),
			'username'	=> $username,
			'password'	=> $aMember['password'],
			'gender'	=> $aMember['sex'],
			'email'		=> $aMember['email'],
			'credits'	=> $aMember['point'],
			'regip'		=> $aMember['reg_ip'],
			'regdate'	=> $aMember['regtime'],
			'qq'        => ''
		);
			
		$auth = passport_encrypt(passport_encode($member), $this->_config['PrivateKey']);
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."api/shopex.php":$this->_config['URL'];
		header('Location: '.$shop_loginapi_url.'?action=login&auth='.rawurlencode($auth).'&forward='.rawurlencode($rurl).'&verify='.md5('login'.$auth.$rurl.$this->_config['PrivateKey']));
		exit;			
	}	

	function logout($userId,$rurl) {
		$shop_loginapi_url = substr($this->_config['URL'],-1)=="/"?$this->_config['URL']."api/shopex.php":$this->_config['URL'];
		header('Location: '.$shop_loginapi_url.'?action=logout&forward='.rawurlencode($rurl).'&verify='.md5('logout'.$rurl.$this->_config['PrivateKey']));
		exit;
			
	}


}

/*******外挂系统数据加密*********/
function passport_encrypt($txt, $key) {
	srand((double)microtime() * 1000000);
	$encrypt_key = md5(rand(0, 32000));
	$ctr = 0;
	$tmp = '';
	for($i = 0;$i < strlen($txt); $i++) {
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
	}
	return base64_encode(passport_key($tmp, $key));
}

function passport_decrypt($txt, $key) {
	$txt = passport_key(base64_decode($txt), $key);
	$tmp = '';
	for ($i = 0;$i < strlen($txt); $i++) {
		$md5 = $txt[$i];
		$tmp .= $txt[++$i] ^ $md5;
	}
	return $tmp;
}

function passport_key($txt, $encrypt_key) {
	$encrypt_key = md5($encrypt_key);
	$ctr = 0;
	$tmp = '';
	for($i = 0; $i < strlen($txt); $i++) {
		$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
		$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
	}
	return $tmp;
}

function passport_encode($array) {
		$arrayenc = array();
		foreach($array as $key => $val) {
			$arrayenc[] = $key.'='.urlencode($val);
		}
		return implode('&', $arrayenc);
}

/*******end of 外挂系统数据加密*********/	

?>