web-base/Core/Objects/Captcha/GoogleRecaptchaProvider.php
2024-04-23 14:05:33 +02:00

43 lines
1.3 KiB
PHP

<?php
namespace Core\Objects\Captcha;
class GoogleRecaptchaProvider extends CaptchaProvider {
public function __construct(string $siteKey, string $secretKey) {
parent::__construct($siteKey, $secretKey);
}
public function verify(string $captcha, string $action): bool {
$url = "https://www.google.com/recaptcha/api/siteverify";
$success = false;
$response = $this->performVerifyRequest($url, $captcha);
$this->error = "Could not verify captcha: Invalid response from Google received.";
if ($response) {
$success = $response["success"];
if (!$success) {
$this->error = "Could not verify captcha: " . implode(";", $response["error-codes"]);
} else {
$score = $response["score"];
if ($action !== $response["action"]) {
$success = false;
$this->error = "Could not verify captcha: Action does not match";
} else if ($score < 0.7) {
$success = false;
$this->error = "Could not verify captcha: Google ReCaptcha Score < 0.7 (Your score: $score), you are likely a bot";
} else {
$success = true;
$this->error = "";
}
}
}
return $success;
}
public function getName(): string {
return CaptchaProvider::RECAPTCHA;
}
}