acf
This commit is contained in:
		| @ -0,0 +1,99 @@ | ||||
| <?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; | ||||
|  | ||||
| class Turnstile extends Integration | ||||
| { | ||||
| 	/** | ||||
| 	 *  Service Endpoint | ||||
| 	 * | ||||
| 	 *  @var  string | ||||
| 	 */ | ||||
| 	protected $endpoint = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; | ||||
|  | ||||
| 	/** | ||||
| 	 * Create a new instance | ||||
| 	 *  | ||||
| 	 * @param   array $options | ||||
| 	 *  | ||||
| 	 * @throws \Exception | ||||
| 	 */ | ||||
| 	public function __construct($options = []) | ||||
| 	{ | ||||
| 		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 Cloudflare Turnstile siteverify API to verify whether the user passes the test. | ||||
| 	 * | ||||
| 	 *  @param   string   $response  Response string from Cloudflare Turnstile verification. | ||||
| 	 *  @param   string   $remoteip  IP address of end user | ||||
| 	 * | ||||
| 	 *  @return  bool                Returns true if the user passes the test | ||||
| 	 */ | ||||
| 	public function validate($response, $remoteip = null) | ||||
| 	{ | ||||
| 		if (empty($response) || is_null($response)) | ||||
| 		{ | ||||
| 			return $this->setError('NR_RECAPTCHA_PLEASE_VALIDATE'); | ||||
| 		} | ||||
|  | ||||
| 		$data = [ | ||||
| 			'secret'   => $this->key, | ||||
| 			'response' => $response, | ||||
| 		]; | ||||
| 		 | ||||
| 		$this->post('', $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_TURNSTILE') . ': ' . Text::_($error); | ||||
| 		return false; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user