Пример #1
0
 public function updateSessionId(User $user, $oldUserId)
 {
     SessionDAO::create()->dropByUserId($oldUserId);
     $session = SessionDAO::create()->getByUserId($user->getId());
     $session->setSessionId($user->getWSRequest()->getCookie('token'))->setAccessTime(date(self::TIMESTAMP))->setUserId($user->getId());
     $session->save();
     PropertiesDAO::create()->dropByUserId($oldUserId);
     UserBlacklistDAO::create()->dropByUserId($oldUserId);
     NameChangeDAO::create()->dropByUserId($oldUserId);
     UserDAO::create()->dropById($oldUserId);
 }
Пример #2
0
 public function handleRequest(ChainContainer $chain)
 {
     $newUserWrapper = $chain->getFrom();
     $container = DI::get()->container();
     $logger = $container->get('logger');
     /* @var $logger Logger */
     $clients = DI::get()->getUsers();
     $socketRequest = $newUserWrapper->getWSRequest();
     /* @var $socketRequest Request */
     $langCode = $socketRequest->getCookie('lang') ?: 'ru';
     $lang = $container->get('lang')->setLangByCode($langCode);
     /* @var $lang Lang */
     $newUserWrapper->setIp($socketRequest->getHeader('X-Real-IP'))->setLastMsgId((int) $socketRequest->getCookie('lastMsgId'))->setLanguage($lang);
     $imprint = $socketRequest->getCookie('token2');
     $sessionHandler = DI::get()->getSession();
     $logger->info("New connection:\n            IP = {$newUserWrapper->getIp()},\n            token = {$socketRequest->getCookie('token')},\n            token2 = {$imprint},\n            lastMsgId = {$newUserWrapper->getLastMsgId()}", [__CLASS__]);
     try {
         if (!($token = $socketRequest->getCookie('token'))) {
             throw new InvalidSessionException('No token');
         }
         /** @var SessionDAO $session */
         $session = $sessionHandler->read($token);
         if (!$session) {
             $tmpSession = TmpSessionDAO::create()->getBySessionId($token);
             if (!$tmpSession->getId()) {
                 throw new InvalidSessionException('Wrong token ' . $token);
             }
             $tmpSession->dropById($tmpSession->getId());
             $session = SessionDAO::create()->setSessionId($token);
         }
     } catch (InvalidSessionException $e) {
         $logger->error("Unauthorized session {$newUserWrapper->getIp()}; " . $e->getMessage(), [__CLASS__]);
         $newUserWrapper->send(['msg' => $lang->getPhrase('UnAuthSession'), 'refreshToken' => 1]);
         $newUserWrapper->close();
         return false;
     }
     if ($session->getUserId() != 0) {
         $user = $this->handleKnownUser($session, $clients, $logger, $newUserWrapper);
         $logger->info('Handled known user_id = ' . $user->getId());
     } else {
         $user = $this->createNewUser($lang, $logger, $newUserWrapper, $socketRequest);
     }
     //update access time
     $sessionHandler->store($token, $user->getId());
     if ($imprint) {
         $logger->info('Searching similar imprint ' . $imprint . ' for user ' . $user->getId());
         $user->setImprint($imprint);
         $similarUser = UserDAO::create()->getByImprint($imprint);
         if (count($similarUser)) {
             /** @var UserDAO $similarUser */
             $similarUser = $similarUser[0];
             if ($similarUser->getId() && $similarUser->getId() != $user->getId()) {
                 $logger->info('Found banned user ' . $similarUser->getId() . ', banning also ' . $user->getId());
                 $user->setBanned(true);
             }
         }
         $user->save(false);
     }
     if ($user->isBanned()) {
         $logger->info('Dropping banned user ' . $user->getId());
         $newUserWrapper->send(['msg' => 'Banned!', 'disconnect' => 1]);
         return false;
     }
     $newUserWrapper->setUserDAO($user)->setToken($token)->setLoginTime(time());
     $clients->attach($newUserWrapper);
 }