Mithril as main method
This commit is contained in:
108
Core/Token.php
108
Core/Token.php
@@ -1,43 +1,95 @@
|
||||
<?php
|
||||
namespace Core;
|
||||
|
||||
use App\Models\ApiModel;
|
||||
use App\Models\ClientSession;
|
||||
use Defuse\Crypto\Crypto;
|
||||
use Defuse\Crypto\Key;
|
||||
|
||||
class Token
|
||||
{
|
||||
public static function generate()
|
||||
public static function generate($id)
|
||||
{
|
||||
if(!Session::exists('tokens'))
|
||||
{
|
||||
Session::put('tokens', []);
|
||||
}
|
||||
// $user = ApiModel::fetch('users', [
|
||||
// ['id', '=', $id]
|
||||
// ]);
|
||||
// $token = Hash::make($user['full_name'] . $user['salt'], $user['salt']);
|
||||
|
||||
$tokens = Session::get('tokens');
|
||||
// Token exists for x seconds
|
||||
$expires = 60;
|
||||
// Talk to database
|
||||
// Get salt
|
||||
$user = ApiModel::fetch('users', [
|
||||
['id', '=', $id]
|
||||
]);
|
||||
$salt = $user['salt'];
|
||||
// Get hash string
|
||||
$session = ClientSession::fetch(['uid' => $id]);
|
||||
$hash_string = $session['id'].$session['ip_address'];
|
||||
// Create array
|
||||
$array_token = [
|
||||
'uid' => $id,
|
||||
'expires' => time() + $expires,
|
||||
'token' => Hash::make($hash_string, $salt)
|
||||
];
|
||||
// Convert array to string and to base64
|
||||
$token = serialize($array_token);
|
||||
$token = base64_encode($token);
|
||||
// Create a key
|
||||
$key = Key::loadFromAsciiSafeString($salt);
|
||||
// Encrypt token
|
||||
$token = Crypto::encrypt($token, $key);
|
||||
// Configure token (\$id.token)
|
||||
// Convert id to base64
|
||||
$id = base64_encode($id);
|
||||
$token = '\$'.$id.'.'.$token;
|
||||
|
||||
if(count($tokens) >= 10)
|
||||
{
|
||||
array_shift($tokens);
|
||||
}
|
||||
|
||||
$tokens[] = md5(uniqid());
|
||||
|
||||
Session::put('tokens', $tokens);
|
||||
|
||||
return end($tokens);
|
||||
return $token;
|
||||
}
|
||||
|
||||
public static function check($token)
|
||||
public static function validate($token)
|
||||
{
|
||||
$tokenName = 'tokens';
|
||||
$tokenNow = $token;
|
||||
$request_token = self::fetch($token);
|
||||
|
||||
if(Session::exists($tokenName))
|
||||
{
|
||||
if(in_array($tokenNow, Session::get($tokenName)))
|
||||
{
|
||||
Session::delete($tokenName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$exploded = explode('.', $token);
|
||||
$id = self::getId($exploded[0]);
|
||||
|
||||
return false;
|
||||
$user = ApiModel::fetch('users', [
|
||||
['id', '=', $id]
|
||||
]);
|
||||
$salt = $user['salt'];
|
||||
$session = ClientSession::fetch(['uid' => $id]);
|
||||
$hash_string = $session['id'].$session['ip_address'];
|
||||
$server_token = Hash::make($hash_string, $salt);
|
||||
|
||||
if ($request_token['expires'] >= time() && $request_token['token'] == $server_token) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function fetch($token)
|
||||
{
|
||||
// Get id and token
|
||||
$exploded = explode('.', $token);
|
||||
$id = self::getId($exploded[0]);
|
||||
$token = $exploded[1];
|
||||
|
||||
$user = ApiModel::fetch('users', [
|
||||
['id', '=', $id]
|
||||
]);
|
||||
|
||||
$key = $user['salt'];
|
||||
$key = Key::loadFromAsciiSafeString($key);
|
||||
$token = Crypto::decrypt($token, $key);
|
||||
$token = base64_decode($token);
|
||||
$token = unserialize($token);
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
public static function getId($raw_id)
|
||||
{
|
||||
return base64_decode(substr_replace($raw_id, '', 0, 2));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user