/b2b/plugins/passport/passport.discuz.php
PHP | 214 lines | 180 code | 26 blank | 8 comment | 22 complexity | 0384d4e27cd3298efd1545131025bb5e MD5 | raw file
- <?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']);
- if (substr($this->_config['URL'],-1)=="/")
- $shop_loginapi_url = $this->_config['URL']."api/shopex.php";
- else{
- if (strtoupper(substr($this->_config['URL'],-10,6))=="SHOPEX")
- $shop_loginapi_url=$this->_config['URL'];
- else
- $shop_loginapi_url = $this->_config['URL']."/api/shopex.php";
- }
- 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' => ''
- );
- $rurl.="index.php?passport-create.html";
- $this->setPlugCookie(1);
- $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 getPlugCookie(){
- $account = $this->system->loadModel('member/account');
- return $account->getPlugCookie('CType');
- }
- function setPlugCookie($val){
- $account = $this->system->loadModel('member/account');
- if ($val)
- $account->setPlugCookie('CType','discuzz');
- else
- $account->setPlugCookie('CType','');
- }
- }
- /*******????????*********/
- 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 ????????*********/
- ?>