263 lines
7.5 KiB
PHP
263 lines
7.5 KiB
PHP
<?php
|
||
/**
|
||
*
|
||
* platform programe
|
||
* @category Trendible
|
||
* @package ChangeMe
|
||
* @subpackage ChangeMe
|
||
* @author shaun.song ( GTalk/Email: songsj125@gmail.com | MSN: ssj125@hotmail.com )
|
||
* @since 2010-7-1
|
||
* @version SVN: $Id$
|
||
*/
|
||
class ICE_Soar
|
||
{
|
||
const SID = 'sid';
|
||
|
||
//1.2版本配置
|
||
const DOMAIN = ".playcool.com";
|
||
private static $errlog_location = '//vmdev-passport:10000';
|
||
private static $svcenv = array(
|
||
'passport' => array(
|
||
'addr' => 'vmdev-passport:11000',
|
||
'json' => true));
|
||
|
||
/**
|
||
* SOAR
|
||
* 支持1.0、1.2版本
|
||
*
|
||
* @param boolen $isJump 当未登录时是否跳转 默认否
|
||
* @param array $fileds 获取数据的字段名
|
||
* @param string $version 版本,当前支持1.0、1.2版本
|
||
*
|
||
* @return boolen|array
|
||
*/
|
||
public static function checkauth($isJump = false, $fileds = array('uuid','account'), $version = '1.0')
|
||
{
|
||
if ($version == '1.0') {
|
||
return self::checkAuth_1_0($isJump, $fileds);
|
||
} elseif ($version == '1.2') {
|
||
return self::checkAuth_1_2($isJump, $fileds);
|
||
} else {
|
||
return 'version error';
|
||
}
|
||
}
|
||
|
||
/**
|
||
* logout
|
||
* 支持1.0、1.2版本
|
||
*
|
||
* @param string $version 版本,当前支持1.0、1.2版本
|
||
* @return boolen
|
||
*/
|
||
public static function logout($version = '1.0')
|
||
{
|
||
if ($version == '1.0') {
|
||
return self::logout_1_0();
|
||
} elseif ($version == '1.2') {
|
||
return self::logout_1_2();
|
||
} else {
|
||
return 'version error';
|
||
}
|
||
}
|
||
|
||
/**
|
||
* soar 1.0版本
|
||
*
|
||
* @param boolen $isJump
|
||
* @param array $fileds
|
||
* @return boolen|array
|
||
*/
|
||
private static function checkAuth_1_0($isJump = false, $fileds = array('uuid','account'))
|
||
{
|
||
// Check cookie
|
||
if (! isset($_COOKIE[self::SID])) {
|
||
//Kohana::log("error", __METHOD__ . ": cookie (" . self::SID . ") not set on line " . __LINE__);
|
||
if ($isJump) {
|
||
self::login();
|
||
}
|
||
return false;
|
||
}
|
||
$sid = $_COOKIE[self::SID];
|
||
|
||
// Initialized session manager.
|
||
require_once dirname(__FILE__) . '/../3rd/soar/1.0/soar.inc';
|
||
|
||
$soar = new soar();
|
||
|
||
$session = $soar->session();
|
||
|
||
$soar->close();
|
||
// Fetch session values.
|
||
$session->setsid($sid);
|
||
|
||
$values = $session->getkey($fileds);
|
||
|
||
// Handle error.
|
||
if (is_null($values)) {
|
||
//Kohana::log("error", __METHOD__ . ": cookie(" . self::SID . ")=$sid not valid, err:" . $session->last_error . "on line " . __LINE__);
|
||
if ($isJump) {
|
||
self::login();
|
||
}
|
||
return false;
|
||
|
||
}
|
||
|
||
$param = self::getParam($fileds, $values);
|
||
$param[self::SID] = $_COOKIE[self::SID];
|
||
|
||
return $param;
|
||
}
|
||
|
||
/**
|
||
* soar 1.2版本
|
||
*
|
||
* @param boolen $isJump
|
||
* @param array $fileds
|
||
* @return boolen|array
|
||
*/
|
||
private static function checkAuth_1_2($isJump = false, $fileds = array('uuid','account'))
|
||
{
|
||
|
||
// Soar
|
||
require_once dirname(__FILE__) . '/../3rd/soar/1.2/web.inc';
|
||
errlog::init("httpd", self::$errlog_location);
|
||
|
||
if (! isset($_COOKIE[self::SID])) {
|
||
errlog::add("%s|%s: cookie(%s) not set", basename(__FILE__), __METHOD__, self::SID);
|
||
if ($isJump) {
|
||
self::login();
|
||
}
|
||
return false;
|
||
}
|
||
|
||
$sid = $_COOKIE[self::SID];
|
||
|
||
errlog::add("%s|%s: cookie(%s)=%s", basename(__FILE__), __METHOD__, self::SID, $sid);
|
||
$svcenv = new svcenv(self::$svcenv['passport']);
|
||
$session = $svcenv->session();
|
||
$session->setsid($sid);
|
||
|
||
$res = $session->validate();
|
||
|
||
if ($res != true) {
|
||
if ($isJump) {
|
||
self::login();
|
||
}
|
||
return false;
|
||
}
|
||
$user_info = array(self::SID=>$sid);
|
||
foreach ($fileds as $key) {
|
||
$vals = $session->getkey(array(
|
||
$key));
|
||
if (is_null($vals)) {
|
||
if ($session->last_error != SOAR_ERR_SESSION_KEY_NOT_FOUND) {
|
||
errlog::add("%s|%s: cookie(%s)=%s not valid, ", "err:%s", basename(__FILE__), __METHOD__, self::SID, $sid, $session->last_error);
|
||
return false;
|
||
}
|
||
$user_info[$key] = '';
|
||
} else
|
||
$user_info[$key] = $vals[0];
|
||
}
|
||
return $user_info;
|
||
|
||
}
|
||
|
||
/**
|
||
* logout 1.0版本
|
||
*
|
||
* @return boolen|array
|
||
*/
|
||
private static function logout_1_0()
|
||
{
|
||
// Check cookie
|
||
if (! isset($_COOKIE[self::SID])) {
|
||
//Kohana::log("error", __METHOD__ . ": cookie (" . self::SID . ") not set on line " . __LINE__);
|
||
return false;
|
||
}
|
||
$sid = $_COOKIE[self::SID];
|
||
|
||
// Initialized session manager.
|
||
require_once dirname(__FILE__) . '/../3rd/soar/1.0/soar.inc';
|
||
|
||
$soar = new soar();
|
||
|
||
$session = $soar->session();
|
||
|
||
$soar->close();
|
||
// Fetch session values.
|
||
$session->setsid($sid);
|
||
|
||
if ($session->destroy() != true) {
|
||
//Kohana::log("error", __METHOD__ . ": cookie(" . self::SID . ")=$sid not valid, err:" . $session->last_error . "on line " . __LINE__);
|
||
return false;
|
||
}
|
||
|
||
setcookie(self::SID, "", 0, "/", self::DOMAIN);
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* logout 1.2版本
|
||
* @return boolen
|
||
*/
|
||
private static function logout_1_2()
|
||
{
|
||
// Soar
|
||
require_once dirname(__FILE__) . '/../3rd/soar/1.2/web.inc';
|
||
errlog::init("httpd", self::$errlog_location);
|
||
|
||
if (! isset($_COOKIE[self::SID])) {
|
||
errlog::add("%s.%s: cookie(%s) empty", basename(__FILE__), __METHOD__, self::SID);
|
||
return false;
|
||
}
|
||
|
||
$sid = $_COOKIE[self::SID];
|
||
$svcenv = new svcenv(self::$svcenv['passport']);
|
||
$session = $svcenv->session();
|
||
$session->setsid($sid);
|
||
if ($session->destroy() != true) {
|
||
errlog::add("%s.%s: fail, err:%s", basename(__FILE__), __METHOD__, $session->last_error);
|
||
}
|
||
|
||
setcookie(self::SID, "", 0, "/", self::DOMAIN);
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 修正数据
|
||
*
|
||
* @param array $fileds
|
||
* @param array $data
|
||
* @return array
|
||
*/
|
||
private static function getParam($fileds, $data)
|
||
{
|
||
if (empty($fileds)) {
|
||
return array();
|
||
}
|
||
|
||
$row = array();
|
||
foreach ($fileds as $k => $v) {
|
||
$row[$v] = isset($data[$k]) ? $data[$k] : null;
|
||
}
|
||
|
||
return $row;
|
||
}
|
||
|
||
/**
|
||
* 登录页面
|
||
*/
|
||
private static function login()
|
||
{
|
||
$returl = urlencode("http://" . $_SERVER["HTTP_HOST"] . $_SERVER['PHP_SELF']);
|
||
|
||
// Redirect passport logout.
|
||
header('Location:http://member.playcool.com/sign_in.aspx?ReturnUrl=' . $returl);
|
||
exit();
|
||
}
|
||
|
||
}
|
||
|
||
// End ^ LF ^ UTF-8
|