/** * Checks a request for previous failures * * @param string $username * @param Request $request * * @return FailureManager * * @throws RequireCaptchaException In case a captcha unlock is required */ public function checkFailures($username, Request $request) { $failures = $this->repository->findLockedFailuresMatching($username, $request->getClientIp()); if (0 === count($failures)) { return; } if ($this->trials < count($failures) && $this->captcha->isSetup()) { $response = $this->captcha->bind($request); if ($response->isValid()) { foreach ($failures as $failure) { $failure->setLocked(false); } $this->em->flush(); } else { throw new RequireCaptchaException('Too much failure, require captcha'); } } return $this; }