/** * @param SmallUserInterface $user * @return bool */ protected function handleInvalidLogin(SmallUserInterface $user) { $maxTries = $this->collectionOptions->getLoginOptions()->getExploit()['try']; if (!$maxTries) { return false; } $entityManager = $this->entityManager; /** * Set LoginHistory */ $class = $this->collectionOptions->getEntityOptions()->getLoginFailed(); /** @var \PServerCore\Entity\LoginFailed $loginFailed */ $loginFailed = new $class(); $loginFailed->setUsername($user->getUsername()); $loginFailed->setIp($this->ipService->getIp()); $entityManager->persist($loginFailed); $entityManager->flush(); $time = $this->collectionOptions->getLoginOptions()->getExploit()['time']; /** @var \PServerCore\Entity\Repository\LoginFailed $repositoryLoginFailed */ $repositoryLoginFailed = $entityManager->getRepository($class); if ($repositoryLoginFailed->getNumberOfFailLogin4Ip($this->ipService->getIp(), $time) >= $maxTries) { $class = $this->collectionOptions->getEntityOptions()->getIpBlock(); /** @var \PServerCore\Entity\IpBlock $ipBlock */ $ipBlock = new $class(); $ipBlock->setExpire(DateTimer::getDateTime4TimeStamp(time() + $time)); $ipBlock->setIp($this->ipService->getIp()); $entityManager->persist($ipBlock); $entityManager->flush(); } return true; }