43 lines
1.3 KiB
PHP
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;
|
|
}
|
|
} |