Files
conservatorio-tomadini/plugins/system/nrframework/NRFramework/Integrations/ReCaptcha.php
2024-12-31 11:07:09 +01:00

103 lines
2.3 KiB
PHP

<?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;
}
}