acf
This commit is contained in:
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @author Tassos Marinos <info@tassos.gr>
|
||||
* @link https://www.tassos.gr
|
||||
* @copyright Copyright © 2024 Tassos All Rights Reserved
|
||||
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
||||
*/
|
||||
|
||||
namespace NRFramework\Integrations;
|
||||
|
||||
// No direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
/**
|
||||
* The reCAPTCHA Wrapper
|
||||
*/
|
||||
class ReCaptcha extends Integration
|
||||
{
|
||||
/**
|
||||
* Service Endpoint
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $endpoint = 'https://www.google.com/recaptcha/api/siteverify';
|
||||
|
||||
/**
|
||||
* Create a new instance
|
||||
*
|
||||
* @param array $options
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!array_key_exists('secret', $options))
|
||||
{
|
||||
$this->setError('NR_RECAPTCHA_INVALID_SECRET_KEY');
|
||||
throw new \Exception($this->getLastError());
|
||||
}
|
||||
|
||||
$this->setKey($options['secret']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the reCAPTCHA siteverify API to verify whether the user passes reCAPTCHA test.
|
||||
*
|
||||
* @param string $response Response string from recaptcha verification.
|
||||
* @param string $remoteip IP address of end user
|
||||
*
|
||||
* @return bool Returns true if the user passes reCAPTCHA test
|
||||
*/
|
||||
public function validate($response, $remoteip = null)
|
||||
{
|
||||
if (empty($response) || is_null($response))
|
||||
{
|
||||
return $this->setError('NR_RECAPTCHA_PLEASE_VALIDATE');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'secret' => $this->key,
|
||||
'response' => $response,
|
||||
'remoteip' => $remoteip ?: \NRFramework\User::getIP(),
|
||||
);
|
||||
|
||||
$this->get('', $data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the response was successful or a failure. If it failed, store the error.
|
||||
*
|
||||
* @return bool If the request was successful
|
||||
*/
|
||||
protected function determineSuccess()
|
||||
{
|
||||
$success = parent::determineSuccess();
|
||||
$body = $this->last_response->body;
|
||||
|
||||
if ($body['success'] == false && array_key_exists('error-codes', $body) && count($body['error-codes']) > 0)
|
||||
{
|
||||
$success = $this->setError(implode(', ', $body['error-codes']));
|
||||
}
|
||||
|
||||
return ($this->request_successful = $success);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set wrapper error text
|
||||
*
|
||||
* @param String $error The error message to display
|
||||
*/
|
||||
private function setError($error)
|
||||
{
|
||||
$this->last_error = Text::_('NR_RECAPTCHA') . ': ' . Text::_($error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user