protected function processJoin(ChainContainer $chain) { if (isset($chain->getRequest()['user_id'])) { ChannelHandler::joinPrivate($chain); } else { ChannelHandler::joinPublic($chain); } }
public function handleRequest(ChainContainer $chain) { $user = $chain->getFrom(); $users = DI::get()->getUsers(); $channels = ChannelsCollection::get(); MainChatDualsHandler::run($user, $users); MainChatPrivateHandler::run($user, $users, $channels); }
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); }
public function handleRequest(ChainContainer $chain) { $user = $chain->getFrom(); $ads = \SocioChat\OnMessageFilters\AdsFilter::get(); $ads->deleteAdTimer($user); $ads->deleteMsgTimer($user); $ads->deleteLastMsgId($user); return true; }
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; } }
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; }
/** * {@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()); }
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; }
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; } } }
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); }
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); }
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(); }
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); }
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); }
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; }
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); }
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); }
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); }
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(); }