<?php declare(strict_types = 1); namespace MailPoet\Captcha; if (!defined('ABSPATH')) exit; use MailPoet\Settings\SettingsController; use MailPoet\WP\Functions as WPFunctions; class ReCaptchaValidator { private const ENDPOINT = 'https://www.google.com/recaptcha/api/siteverify'; /** @var WPFunctions */ private $wp; /** @var SettingsController */ private $settings; public function __construct( WPFunctions $wp, SettingsController $settings ) { $this->wp = $wp; $this->settings = $settings; } /** * @throws \Exception response token is missing or invalid. */ public function validate(string $responseToken) { $captchaSettings = $this->settings->get('captcha'); if (empty($responseToken)) { throw new \Exception(__('Please check the CAPTCHA.', 'mailpoet')); } $secretToken = $captchaSettings['type'] === CaptchaConstants::TYPE_RECAPTCHA ? $captchaSettings['recaptcha_secret_token'] : $captchaSettings['recaptcha_invisible_secret_token']; $response = $this->wp->wpRemotePost(self::ENDPOINT, [ 'body' => [ 'secret' => $secretToken, 'response' => $responseToken, ], ]); if ($this->wp->isWpError($response)) { throw new \Exception(__('Error while validating the CAPTCHA.', 'mailpoet')); } /** @var \stdClass $response */ $response = json_decode($this->wp->wpRemoteRetrieveBody($response)); if ($response === null) { // invalid JSON throw new \Exception(__('Error while validating the CAPTCHA.', 'mailpoet')); } else if (empty($response->success)) { // missing or false throw new \Exception(__('Invalid CAPTCHA. Try again.', 'mailpoet')); } } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Validator | Folder | 0755 |
|
|
CaptchaConstants.php | File | 664 B | 0644 |
|
CaptchaFormRenderer.php | File | 8.26 KB | 0644 |
|
CaptchaHooks.php | File | 3 KB | 0644 |
|
CaptchaPhrase.php | File | 891 B | 0644 |
|
CaptchaRenderer.php | File | 2.35 KB | 0644 |
|
CaptchaSession.php | File | 1.63 KB | 0644 |
|
CaptchaUrlFactory.php | File | 1.88 KB | 0644 |
|
PageRenderer.php | File | 2.12 KB | 0644 |
|
ReCaptchaRenderer.php | File | 1.08 KB | 0644 |
|
ReCaptchaValidator.php | File | 1.67 KB | 0644 |
|
index.php | File | 6 B | 0644 |
|