captchaGenerateService->generate(); if ($captcha->isError()) { return $captcha; } $modelCaptcha = DB::transaction(function () use ($captchaPublicToken) { return $this->captchaHandler->handleStore($captchaPublicToken->getCaptchaToken(), $captchaPublicToken->getHttpUserData()); }); $captchaKey = $this->dataCaptchaRepository->store($modelCaptcha, $captcha->getImageBody()->getCoordinators(), $expires); } catch (\Throwable $e) { report($e); return $this->errService('Captcha service error!'); } return new Captcha( imageHead: $captcha->getImageHead()->getImage(), imageBody: $captcha->getImageBody()->getImage(), key: $captchaKey ); } public function checking(CheckingDto $checkingDto, int $maxCountError): ServiceResultError | CaptchaVerifiedResult { try { $captchaData = $this->dataCaptchaRepository->getByKey($checkingDto->getCaptchaKey()); if (is_null($captchaData)) { return $this->errValidate(__('Captcha not found or verification period has expired. Please try to refresh the captcha.')); } if (!$this->checkingCommand->execute($captchaData->getCoordinators(), $checkingDto->getCoordinators())) { $this->captchaLogHandler->handleStore($captchaData->getCaptchaId(), CaptchaLogType::Error, $checkingDto->getCaptchaPublicToken()->getHttpUserData()); return $this->errValidate(__('CAPTCHA validation failed. Please try again.')); } $result = DB::transaction(function () use ($checkingDto, $captchaData, $maxCountError) { $errorCount = $this->captchaLogRepository->countByType(CaptchaLogType::Error, $captchaData->getCaptchaId()); if ($errorCount > $maxCountError) { $this->dataCaptchaRepository->destroy($checkingDto->getCaptchaKey()); return $this->errValidate(__('You have exceeded the number of attempts. Please refresh the captcha.')); } $this->captchaLogHandler->handleStore($captchaData->getCaptchaId(), CaptchaLogType::Verified, $checkingDto->getCaptchaPublicToken()->getHttpUserData()); $this->dataCaptchaRepository->destroy($checkingDto->getCaptchaKey()); $modelCaptcha = $this->captchaRepository->getCaptchaById($captchaData->getCaptchaId()); if (is_null($modelCaptcha)) { return $this->errValidate(__('Captcha not found or verification period has expired. Please try to refresh the captcha.')); } return new CaptchaVerifiedResult(key: $modelCaptcha->uuid); }); } catch (\Throwable $e) { report($e); return $this->errService('Captcha service error!'); } return $result; } }