|
@@ -1,30 +1,26 @@
|
|
|
-<?php namespace Dever;
|
|
|
+<?php namespace Dever\Helper;
|
|
|
use Dever;
|
|
|
class Secure
|
|
|
{
|
|
|
- const TIME = 300;
|
|
|
- private static $token = 'dever_api';
|
|
|
public static function login($uid, $extend = false)
|
|
|
{
|
|
|
$auth = '';
|
|
|
$data = Dever::json_encode(array($uid, time(), $extend));
|
|
|
- return self::encode($data, self::$token);
|
|
|
+ return self::encode($data);
|
|
|
}
|
|
|
- public static function checkLogin($signature)
|
|
|
+ public static function checkLogin($signature, $time = 300)
|
|
|
{
|
|
|
- $auth = Dever::json_decode(self::decode($signature, self::$token));
|
|
|
+ self::repeat($signature, $time);
|
|
|
+ $auth = Dever::json_decode(self::decode($signature));
|
|
|
if (isset($auth[0]) && isset($auth[1]) && $auth[0] && $auth[0] > 0) {
|
|
|
- if (time() - $auth[1] < self::TIME) {
|
|
|
+ if (time() - $auth[1] < $time) {
|
|
|
return array('uid' => $auth[0], 'time' => $auth[1], 'extend' => $auth[2]);
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
- public static function get($request, $key = '')
|
|
|
+ public static function get($request)
|
|
|
{
|
|
|
- if ($key) {
|
|
|
- self::$token = $key;
|
|
|
- }
|
|
|
$time = self::timestamp();
|
|
|
$nonce = self::nonce();
|
|
|
$signature = self::signature($time, $nonce, $request);
|
|
@@ -35,10 +31,13 @@ class Secure
|
|
|
);
|
|
|
return $request;
|
|
|
}
|
|
|
- public static function check($request, $param = array(), $key = '')
|
|
|
+ public static function check($request = array(), $time = 300)
|
|
|
{
|
|
|
+ if (!$request) {
|
|
|
+ $request = Dever::input();
|
|
|
+ }
|
|
|
if (empty($request['signature']) || empty($request['nonce'])) {
|
|
|
- Output::error('api signature not exists');
|
|
|
+ Dever::error('api signature not exists');
|
|
|
}
|
|
|
if (isset($request['l'])) {
|
|
|
unset($request['l']);
|
|
@@ -46,32 +45,16 @@ class Secure
|
|
|
if (isset($request['shell'])) {
|
|
|
unset($request['shell']);
|
|
|
}
|
|
|
- if ($key) {
|
|
|
- self::$token = $key;
|
|
|
- }
|
|
|
- self::repeat($request['signature'], self::TIME);
|
|
|
if (empty($request['time'])) {
|
|
|
return self::checkLogin($request['signature']);
|
|
|
}
|
|
|
- if (time() - $request['time'] > self::TIME) {
|
|
|
- Output::error('api signature has expired');
|
|
|
- }
|
|
|
- $signature_check = $request['signature'];
|
|
|
- if ($param && isset($param['request'])) {
|
|
|
- foreach ($param['request'] as $k => $v) {
|
|
|
- if (isset($request[$k])) {
|
|
|
- $param['request'][$k] = $request[$k];
|
|
|
- }
|
|
|
- }
|
|
|
- $temp = $param['request'];
|
|
|
- $temp['token'] = self::token();
|
|
|
- $temp['time'] = $request['time'];
|
|
|
- $temp['nonce'] = $request['nonce'];
|
|
|
- $request = $temp;
|
|
|
+ self::repeat($request['signature'], $time);
|
|
|
+ if (time() - $request['time'] > $time) {
|
|
|
+ Dever::error('api signature has expired');
|
|
|
}
|
|
|
$signature = self::signature($request['time'], $request['nonce'], $request);
|
|
|
- if ($signature_check != $signature) {
|
|
|
- Output::error('invalid signature');
|
|
|
+ if ($request['signature'] != $signature) {
|
|
|
+ Dever::error('invalid signature');
|
|
|
}
|
|
|
return $signature;
|
|
|
}
|
|
@@ -96,7 +79,7 @@ class Secure
|
|
|
}
|
|
|
public static function token()
|
|
|
{
|
|
|
- return self::$token;
|
|
|
+ return Dever::config('setting')['token'];
|
|
|
}
|
|
|
public static function nonce()
|
|
|
{
|
|
@@ -104,25 +87,21 @@ class Secure
|
|
|
}
|
|
|
public static function timestamp()
|
|
|
{
|
|
|
- return \Dever\Helper\Date::mtime();
|
|
|
+ return Date::mtime();
|
|
|
}
|
|
|
public static function repeat($value, $expire)
|
|
|
{
|
|
|
- if (isset(Config::get('setting')['redis']) && !\Dever\Helper\Redis::lock($value, 1, $expire)) {
|
|
|
- Output::error('api signature repeat');
|
|
|
+ if (isset(Dever::config('setting')['redis']) && !Redis::lock($value, 1, $expire)) {
|
|
|
+ Dever::error('api signature repeat');
|
|
|
}
|
|
|
}
|
|
|
- public static function encode($string, $key = "")
|
|
|
+ public static function encode($string, $key = '')
|
|
|
{
|
|
|
$ckey_length = 5;
|
|
|
if (!$key) {
|
|
|
- $key = Config::get('base')->token;
|
|
|
- if ($key) {
|
|
|
- $key = sha1($key);
|
|
|
- } else {
|
|
|
- $key = sha1(self::$key);
|
|
|
- }
|
|
|
+ $key = self::token();
|
|
|
}
|
|
|
+ $key = sha1($key);
|
|
|
$keya = md5(substr($key, 0, 16));
|
|
|
$keyb = md5(substr($key, 16, 16));
|
|
|
$keyc = '';
|
|
@@ -160,13 +139,9 @@ class Secure
|
|
|
{
|
|
|
$ckey_length = 5;
|
|
|
if (!$key) {
|
|
|
- $key = Config::get('base')->token;
|
|
|
- if ($key) {
|
|
|
- $key = sha1($key);
|
|
|
- } else {
|
|
|
- $key = sha1(self::$key);
|
|
|
- }
|
|
|
+ $key = self::token();
|
|
|
}
|
|
|
+ $key = sha1($key);
|
|
|
$keya = md5(substr($key, 0, 16));
|
|
|
$keyb = md5(substr($key, 16, 16));
|
|
|
$keyc = '';
|
|
@@ -223,4 +198,4 @@ class Secure
|
|
|
$decodestr = base64_decode($string);
|
|
|
return $decodestr;
|
|
|
}
|
|
|
-}
|
|
|
+}
|