password)) return false; $until = time() + self::$tokenLifetime; $hash = hash('sha256', $login.'|'.$password.'|'.$until.'|'.self::$secret); self::updateOnline($login); return implode('|', rtrim(strtr(base64_encode($login.'|'.$password.'|'.$until.'|'.$hash), '+/', '-_'), '=')); } public static function get($login) { return DB::getQuery('main', 'SELECT * FROM `users` WHERE `login` = ?', $login); } private static function checkToken($token) { $data = explode('|', base64_decode(str_pad(strtr($token, '-_', '+/'), strlen($token) % 4, '=', STR_PAD_RIGHT))); list($login, $password, $until, $hash) = $data; if($until < time()) return false; if($hash != hash('sha256', $login.'|'.$password.'|'.$until.'|'.self::$secret)) return false; $user = DB::getQuery('main', 'SELECT `password` FROM `users` WHERE `login` = ?', $login); if($password != $user->password) return false; self::updateOnline($login); return $login; } private static function updateOnline($login) { DB::getQuery('main', 'UPDATE `users` SET `online_dt` = ? WHERE `login` = ?', [time(), $login]); } } User::init($config['user']);