<?php
namespace imcat;
/*
*/
class comToken{
static $rate = 3; // 单位:分钟
//static $ratw = 5; // 单位:秒(数据写入更新)
/*public function __construct($kid='',$token=''){
//
}*/
// 得到一个唯一token
static function guid($kid=''){
if(empty($kid)) return '';
$p1 = comConvert::sysEncode(microtime(1).$kid,'rest-token',23);
$p2 = comConvert::sysBase64($kid);
return "$p1.$p2";
}
// 检测:rest权限,
static function perm($token,$mod,$key){
$db = glbDBObj::dbObj();
// 权限:
$row = $db->table('token_rest')->where("token='$token'")->find();
if($row){
if($row['exp']<$_SERVER["REQUEST_TIME"]){ // 过期
glbError::show("Token Expired [".(date('Y-m-d H:i:s',$row['exp']))."]");
} // demo=table,list,check;
$perm = basElm::text2arr(str_replace(';','&',$row['perm']));
if(!isset($perm[$mod])){
glbError::show("No Permission for [$mod]");
}elseif(!strstr($perm[$mod],$key)){
glbError::show("No Permission [$key] in [$mod]");
}else{
$pmod = $perm[$mod]; // 用于返回
}
$row['perm'] = $perm;
$row['pmod'] = $pmod;
}else{
glbError::show("Token Error [$token]");
}
return $row;
}
// 检测:limit频率
static function limit($token,$mod,$key){
$db = glbDBObj::dbObj();
// 频率:
$arr = array('kid'=>$token,'mod'=>$mod,'act'=>$key);
$rli = $db->table('token_limit')->where($arr)->find();
if($rli){
$gap = $_SERVER["REQUEST_TIME"]-$rli['etime'];
$rate = empty($row['rate']) ? self::$rate : intval($row['rate']);
if($gap<$rate*60){
$wait = $rate*60 - $gap;
glbError::show("Too many Request! Please Wait $wait(s)");
}
}else{
$gap = $_SERVER["REQUEST_TIME"]-1;
$db->table('token_limit')->data($arr)->insert(0);
}
return $gap;
}
// 更新:limit
static function upd($token,$mod,$key){
$db = glbDBObj::dbObj();
$arr = array('kid'=>$token,'mod'=>$mod,'act'=>$key);
$db->table('token_limit')->data(array('etime'=>$_SERVER["REQUEST_TIME"]))->where($arr)->update(0);
}
}