| 1234567891011121314151617181920212223242526272829 | <?php
/*
 * OAS Admin Auth
 * 
 * Author: XUCHAGN ZHANG
 *
 * Login status data in session like this:
 * 
 *	{
 *		email: "zhangxuchang@oasgame.com",
 *		permissionid: "40001,40002,40003,40004,40004001",
 *		uid: "200000000000000"
 *	}
 *
 * */
define('OAS_ADMIN_LOGIN_SESSION_KEY','oas_admin_login_key');
define('OAS_ADMIN_SESSION_APPID_KEY','oas_admin_session_appid_key');
session_start();
class OAS_AdminAuth{
	
	private static $_adminHost = "http://adm.oasgames.com";
	private static $_ucHost    = "http://passport.oasgames.com";
	
	// Sys user login
	public static function loginHandler($sys_code){
		
		if(!empty($_REQUEST['adm_key'])){
			self::integrateLogin($sys_code);
		}
	}
	
	public static function getLoginUser(){
		
		$loginUser = $_SESSION[OAS_ADMIN_LOGIN_SESSION_KEY];
		if(empty($loginUser)){
			self::directToLoginPage();
		}
		return $loginUser;
		
	}
	
	public static function logoutHandler(){
		$_SESSION[OAS_ADMIN_LOGIN_SESSION_KEY] = null;
		self::directToLoginPage();
	}
		private static function integrateLogin($sys_code){			$user_key = $_REQUEST["adm_key"];		$app_id   = $_REQUEST['app_id'];
				// No login key		if(empty($user_key)){			self::directToLoginPage($app_id,'adm_key_is_null');		}			//get user information		$getuser_api = self::$_ucHost . "/?m=getLoginUser&oas_user=".$user_key;		$userinfo    = file_get_contents($getuser_api);		$userinfo    = json_decode($userinfo,true);			if($userinfo['status']=='ok'){			
			$right = self::getUserRights($userinfo['val']['id'],$sys_code);			
			if(is_array($right)){
				// set login status,save user info in session				$_SESSION[OAS_ADMIN_LOGIN_SESSION_KEY] = $right;				$_SESSION[OAS_ADMIN_SESSION_APPID_KEY] = $app_id;			}			else{				self::directToLoginPage($app_id,$right);			}		}		else{			self::directToLoginPage($app_id,'login_status_timeout');		}	}
	
	private static function getUserRights($uid,$sys_code){
		
		$sys  = $sys_code;
		$key  = md5( $sys . $uid . 'c16a292901bf9db7');
		$api  = self::$_adminHost . "/api/get_per_uid_sys.php?uid=$uid&systemid=$sys&secrtkey=$key";
		
		$res = self::makeRequest($api,array(),10);
		
		if(empty($res)){
			return 'get_right_no_response';
		}
		
		$rights = json_decode($res,true);
		
		if($rights['status']=="fail"){
			return "get_right_err_{$rights['err_code']}";
		}
		return $rights['val'];
	}
	private static function directToLoginPage($appid='',$err=''){
		
		// app id
		if(!empty($appid)){
			$app_id = $appid;
		}
		else{
			$app_id = $_SESSION[OAS_ADMIN_SESSION_APPID_KEY];
		}
		
		$url = self::$_adminHost . "/login.php?app_id=$app_id";
		
		// err msg
		if(!empty($err)){
			$url = "$url&err=$err";
		}
		// direct		
		header("Location: $url");
		exit();
	}
	
	private static function makeRequest($url, $params,$timeout=15,$post=true,$file_upload=false) {
	    $ch = curl_init();
	    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	    curl_setopt($ch, CURLOPT_URL, $url);
	    curl_setopt($ch, CURLOPT_POST, $post);
	    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		if($file_upload == false){
	    	curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
			curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));  
		}
		else{
			curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
		}
	    $result = curl_exec($ch);
	    curl_close($ch);
	    return $result;
	}	
	
}// class end
 |