Ejemplo n.º 1
0
 protected function processJoin(ChainContainer $chain)
 {
     if (isset($chain->getRequest()['user_id'])) {
         ChannelHandler::joinPrivate($chain);
     } else {
         ChannelHandler::joinPublic($chain);
     }
 }
Ejemplo n.º 2
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $users = DI::get()->getUsers();
     $channels = ChannelsCollection::get();
     MainChatDualsHandler::run($user, $users);
     MainChatPrivateHandler::run($user, $users, $channels);
 }
Ejemplo n.º 3
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     if (isset($chain->getRequest()['subject']) && $chain->getRequest()['subject'] == 'Ping') {
         return $this->manageRequest($user, $this->pingTimers, false);
     }
     return $this->manageRequest($user, $this->otherTimers);
 }
Ejemplo n.º 4
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $ads = \SocioChat\OnMessageFilters\AdsFilter::get();
     $ads->deleteAdTimer($user);
     $ads->deleteMsgTimer($user);
     $ads->deleteLastMsgId($user);
     return true;
 }
Ejemplo n.º 5
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $currentToken = $user->getWSRequest()->getCookie('token');
     if (!$currentToken || $currentToken != $user->getToken()) {
         $user->send(['msg' => $user->getLang()->getPhrase('UnAuthSession'), 'refreshToken' => 1]);
         $user->close();
         return false;
     }
 }
Ejemplo n.º 6
0
 public function handleRequest(ChainContainer $chain)
 {
     $clients = DI::get()->getUsers();
     $conn = $chain->getFrom()->getConnectionId();
     if (!($user = $clients->getClientByConnectionId($conn))) {
         return false;
     }
     $chain->setFrom($user);
     return true;
 }
Ejemplo n.º 7
0
 /**
  * {@inheritdoc}
  */
 public function handleRequest(ChainContainer $chain)
 {
     $users = DI::get()->getUsers();
     $user = $chain->getFrom();
     $this->sendNickname($user);
     $this->handleHistory($user);
     $this->notifyChat($user, $users);
     $online = OnlineDAO::create();
     $online->setOnlineList($user->getChannelId());
 }
Ejemplo n.º 8
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     if (isset($chain->getRequest()['subject']) && $chain->getRequest()['subject'] == 'Message') {
         $this->setMsgTimer($user);
         return true;
     }
     if (!isset($this->adTimers[$user->getId()])) {
         $this->setAdLoop($user);
     }
     return true;
 }
Ejemplo n.º 9
0
 public function validateFields(ChainContainer $chain)
 {
     $request = $chain->getRequest();
     if (empty($this->getFields())) {
         return;
     }
     $user = $chain->getFrom();
     foreach ($this->getFields() as $field) {
         if (!isset($request[$field])) {
             RespondError::make($user, $user->getLang()->getPhrase('RequiredPropertyNotSpecified'));
             return false;
         }
     }
 }
Ejemplo n.º 10
0
 public function handleRequest(ChainContainer $chain)
 {
     $request = $chain->getRequest();
     if (!isset($request['subject']) || !isset($this->map[$request['subject']])) {
         return false;
     }
     $controllerName = $this->map[$request['subject']];
     $controller = new $controllerName();
     /* @var $controller ControllerBase */
     if ($controller->validateFields($chain) === false) {
         return false;
     }
     $controller->handleRequest($chain);
 }
Ejemplo n.º 11
0
 protected function processRemove(ChainContainer $chain)
 {
     $request = $chain->getRequest();
     $user = $chain->getFrom();
     if (!($unbanUser = UserDAO::create()->getById($request['user_id']))) {
         RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('ThatUserNotFound')]);
         return;
     }
     if ($unbanUser->getId() == $user->getId()) {
         RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('CantDoToYourself')]);
         return;
     }
     $user->getBlacklist()->unbanUserId($unbanUser->getId());
     $user->save();
     $this->unbanResponse($user, $unbanUser);
 }
Ejemplo n.º 12
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $loop = DI::get()->container()->get('eventloop');
     $logger = DI::get()->getLogger();
     if ($user->isAsyncDetach()) {
         $timeout = DI::get()->getConfig()->session->timeout;
         $logger->info("OnClose: Detach delayed for {$timeout} sec for user_id = {$user->getId()}...");
         $timer = $loop->addTimer($timeout, $this->detacher($user, $logger));
         $user->setDisconnectTimer($timer);
     } else {
         $logger->info("OnClose: Detached instantly user_id {$user->getId()}, connId = {$user->getConnectionId()}...");
         $this->detacher($user, $logger);
     }
     $user->getConnection()->close();
 }
Ejemplo n.º 13
0
 protected function processSave(ChainContainer $chain)
 {
     $request = $chain->getRequest();
     $user = $chain->getFrom();
     if (!($notedUser = UserDAO::create()->getById($request[UserNotesDAO::USER_ID]))) {
         RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('ThatUserNotFound')]);
         return;
     }
     if ($notedUser->getId() == $user->getId()) {
         RespondError::make($user, ['user_id' => $user->getLang()->getPhrase('CantDoToYourself')]);
         return;
     }
     $dao = $user->getUserNotes()->setUserId($user->getId())->setNotedUserId($notedUser->getId())->setNote($this->filterInput($request[UserNotesDAO::NOTE]));
     $dao->save();
     $this->guestResponse($user);
 }
Ejemplo n.º 14
0
 public static function run(ChainContainer $chain)
 {
     $duals = PendingDuals::get();
     $users = DI::get()->getUsers();
     $user = $chain->getFrom();
     $lang = $user->getLang();
     if ($user->getProperties()->getTim()->getId() == TimEnum::ANY) {
         $user->send(['msg' => $lang->getPhrase('SelectTIMinProfile')]);
         return;
     }
     if ($user->isInPrivateChat()) {
         $user->send(['msg' => $lang->getPhrase('ThisFunctionWorkInPublicOnly')]);
         return;
     }
     if ($duals->getUserPosition($user)) {
         $user->send(['msg' => $lang->getPhrase('YouAlreadySentRequestOnSearch')]);
         return;
     }
     if ($dualUserId = $duals->matchDual($user)) {
         $dualUser = $users->getClientById($dualUserId);
         $oldChatId = $user->getChannelId();
         $newChatRoomId = uniqid('_', 1);
         $channel = new Channel($newChatRoomId, 'Приват_' . $newChatRoomId);
         $channel->setOwnerId($user->getId());
         ChannelsCollection::get()->addChannel($channel);
         $dualUser->setChannelId($newChatRoomId);
         $dualUser->save();
         $user->setChannelId($newChatRoomId);
         $user->save();
         self::sendMatchResponse($users->getUsersByChatId($newChatRoomId), MsgToken::create('DualIsFound'));
         self::renewGuestsList($oldChatId, MsgToken::create('DualizationStarted'));
         self::sendRenewPositions($duals->getUsersByDual($user));
         return;
     }
     self::sendPendingResponse($user, MsgToken::create('DualPending'), true);
     self::dualGuestsList($user);
 }
Ejemplo n.º 15
0
 private static function checkRestrictions(ChainContainer $chain, UserCollection $users)
 {
     $user = $chain->getFrom();
     $request = $chain->getRequest();
     $lang = $user->getLang();
     if (!isset($request[PropertiesDAO::USER_ID])) {
         RespondError::make($user);
         return;
     }
     if (!($desiredUser = $users->getClientById($request[PropertiesDAO::USER_ID]))) {
         RespondError::make($user, [PropertiesDAO::USER_ID => $lang->getPhrase('ThatUserNotFound')]);
         return;
     }
     if ($desiredUser->getId() == $user->getId()) {
         RespondError::make($user, [PropertiesDAO::USER_ID => $lang->getPhrase('CantDoToYourself')]);
         return;
     }
     if ($desiredUser->isInPrivateChat()) {
         RespondError::make($user, [PropertiesDAO::USER_ID => $lang->getPhrase('UserAlreadyInPrivate')]);
         return;
     }
     if ($user->isInPrivateChat()) {
         RespondError::make($user, [PropertiesDAO::USER_ID => $lang->getPhrase('YouAlreadyInPrivate')]);
         return;
     }
     return $desiredUser;
 }
Ejemplo n.º 16
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);
 }
Ejemplo n.º 17
0
 protected function processRegister(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $request = $chain->getRequest();
     $email = $request['login'];
     $duplUser = UserDAO::create()->getByEmail($email);
     $isSameUser = $duplUser->getId() == $user->getId();
     if ($duplUser->getId() && !$isSameUser) {
         RespondError::make($user, ['email' => $user->getLang()->getPhrase('EmailAlreadyRegistered')]);
         return;
     }
     if (!$user->isRegistered()) {
         $this->checkReferral($user);
     }
     $userDAO = $user->getUserDAO();
     $userDAO->setEmail($email)->setPassword(password_hash($request['password'], PASSWORD_BCRYPT));
     $userDAO->save();
     $this->sendNotifyResponse($user);
 }
Ejemplo n.º 18
0
 private function filterInput(ChainContainer $appChain)
 {
     $from = $appChain->getFrom();
     $request = $appChain->getRequest();
     unset($request['self']);
     // skip direct command from client
     $chain = (new Chain())->setRequest($request)->setUser($from)->addHandler(new InputFilter())->addHandler(new BlackListFilter())->addHandler(new LineBreakFilter())->addHandler(new CommandFilter())->addHandler(new MusicFilter());
     $chain->run();
     $request = $chain->getRequest();
     if (isset($request['self'])) {
         unset($request['self']);
         $appChain->setRequest($request);
         return true;
     }
     $appChain->setRequest($request);
 }
Ejemplo n.º 19
0
 public function handleRequest(ChainContainer $chain)
 {
     $user = $chain->getFrom();
     $response = (new PingResponse())->setChannelId($user->getChannelId());
     (new UserCollection())->attach($user)->setResponse($response)->notify();
 }
 private function manageKarma(ChainContainer $chain, $mark)
 {
     $operator = $chain->getFrom();
     $request = $chain->getRequest();
     if (!isset($request['user_id'])) {
         RespondError::make($operator, ['user_id' => $operator->getLang()->getPhrase('RequiredPropertyNotSpecified')]);
         return;
     }
     if ($request['user_id'] == $operator->getId()) {
         RespondError::make($operator, ['user_id' => $operator->getLang()->getPhrase('CantDoToYourself')]);
         return;
     }
     if (!$operator->isRegistered()) {
         RespondError::make($operator, ['user_id' => 'Only available for registered user']);
         return;
     }
     if ($operator->getProperties()->getOnlineCount() < 3600) {
         RespondError::make($operator, ['user_id' => $operator->getLang()->getPhrase('OnlineTimeTooLow')]);
         return;
     }
     $users = DI::get()->getUsers();
     $user = $users->getClientById($request['user_id']);
     if (!$user) {
         $properties = PropertiesDAO::create()->getByUserId($request['user_id']);
     } else {
         $properties = $user->getProperties();
     }
     $lastMark = UserKarmaDAO::create()->getLastMarkByEvaluatorId($request['user_id'], $operator->getId());
     if ($lastMark) {
         if (time() - strtotime($lastMark->getDateRegister()) < DI::get()->getConfig()->karmaTimeOut) {
             RespondError::make($operator, ['user_id' => $operator->getLang()->getPhrase('profile.KarmaTimeOut')]);
             return;
         }
     }
     $karma = UserKarmaDAO::create()->getKarmaByUserId($request['user_id']);
     $properties->setKarma($karma + $mark)->save();
     $mark = UserKarmaDAO::create()->setUserId($request['user_id'])->setEvaluator($operator)->setMark($mark)->setDateRegister(DbQueryHelper::timestamp2date());
     $mark->save();
     $chatId = $operator->getChannelId();
     $response = (new MessageResponse())->setGuests($users->getUsersByChatId($chatId))->setChannelId($chatId)->setTime(null);
     DI::get()->getUsers()->setResponse($response)->notify();
 }