File: /var/www/limestate-api/Models/Token.php
<?php
class Token extends Db_Model
{
static $table_name = 'tokens';
public static function generateToken($userId, $count = 0)
{
if ($count > 100) {
new Exception('Зацикливание генерации токена');
}
$token = md5($userId . 'littleTanchu' . time() . 'salt' . rand(1000, 9999));
$oldUser = self::findUser($token);
if ($oldUser) {
if ($oldUser == $userId) {
self::prolongToken($token, $count++);
return $token;
} else {
self::generateToken($userId);
}
} else {
self::create(array(
'user_id' => $userId,
'token' => $token,
'valid_until' => date('Y-m-d H:i:s', strtotime('+1 day'))
));
return $token;
}
}
public static function findUser($token)
{
return self::$db->select('user_id')->from(self::$table_name)
->where('token = ?', $token)
->where('valid_until > NOW()')
->fetchOne();
}
public static function getUserData($token)
{
return User::$db->select('u.id', 'u.email', 'u.level as role_id', 'u.name', 'u.lang')
->from(User::$table_name . ' u')
->join(self::$table_name . ' t', 't.user_id = u.id')
->where('t.valid_until > NOW()')
->where('t.token = ?', $token)
->fetchRow();
}
public static function prolongToken($token)
{
if (self::findUser($token)) {
self::update(array(
'valid_until' => date('Y-m-d H:i:s', strtotime('+1 day'))
), array(
'token' => $token
));
} else {
return false;
}
}
public static function destroyToken($token)
{
if (self::findUser($token)) {
return self::delete(array(
'token' => $token
));
} else {
return false;
}
}
}