HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/doccure-wp-demo/wp-content/plugins/doccure/libraries/recaptchalib/recaptchalib.php
<?php
/**
 * This is a PHP library that handles calling reCAPTCHA.
 *    - Documentation and latest version
 *          https://developers.google.com/recaptcha/docs/php
 *    - Get a reCAPTCHA API Key
 *          https://www.google.com/recaptcha/admin/create
 *    - Discussion group
 *          http://groups.google.com/group/recaptcha
 *
 * @copyright Copyright (c) 2014, Google Inc.
 * @link      http://www.google.com/recaptcha
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

/**
 * A ReCaptchaResponse is returned from checkAnswer().
 */
if( !class_exists('ReCaptchaResponse') ) {
	class ReCaptchaResponse
	{
		public $success;
		public $errorCodes;
	}
}

if( !class_exists('ReCaptcha') ) {
	class ReCaptcha
	{
		private static $_signupUrl = "https://www.google.com/recaptcha/admin";
		private static $_siteVerifyUrl = "https://www.google.com/recaptcha/api/siteverify?";
		private $_secret;
		private static $_version = "php_1.0";
	
		/**
		 * Constructor.
		 *
		 * @param string $secret shared secret between site and ReCAPTCHA server.
		 */
		function __construct($secret)
		{
			if ($secret == null || $secret == "") {
				die("To use reCAPTCHA you must get an API key from <a href='"
					. self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
			}
			$this->_secret=$secret;
		}
	
		/**
		 * Encodes the given data into a query string format.
		 *
		 * @param array $data array of string elements to be encoded.
		 *
		 * @return string - encoded request.
		 */
		private function _encodeQS($data)
		{
			$req = "";
			foreach ($data as $key => $value) {
				$req .= $key . '=' . urlencode(stripslashes($value)) . '&';
			}
	
			// Cut the last '&'
			$req=substr($req, 0, strlen($req)-1);
			return $req;
		}
	
		/**
		 * Submits an HTTP GET to a reCAPTCHA server.
		 *
		 * @param string $path url path to recaptcha server.
		 * @param array  $data array of parameters to be sent.
		 *
		 * @return array response
		 */
		private function _submitHTTPGet($path, $data)
		{
			$req = $this->_encodeQS($data);
			if ( version_compare( phpversion(), '5.6', '<' ) ) {
				$response = file_get_contents( $path . $req );
			} else {
				$pointfinder_stf = array(
				   'ssl' => array(
					  'verify_peer' => false,
					  'verify_peer_name' => false,
					  'allow_self_signed' => true
				   )
				);
				$response = file_get_contents( $path . $req, false, stream_context_create( $pointfinder_stf ) );
			}
			return $response;
		}
	
		/**
		 * Calls the reCAPTCHA siteverify API to verify whether the user passes
		 * CAPTCHA test.
		 *
		 * @param string $remoteIp   IP address of end user.
		 * @param string $response   response string from recaptcha verification.
		 *
		 * @return ReCaptchaResponse
		 */
		public function verifyResponse($remoteIp, $response)
		{
			// Discard empty solution submissions
			if ($response == null || strlen($response) == 0) {
				$recaptchaResponse = new ReCaptchaResponse();
				$recaptchaResponse->success = false;
				$recaptchaResponse->errorCodes = 'missing-input';
				return $recaptchaResponse;
			}
	
			$getResponse = $this->_submitHttpGet(
				self::$_siteVerifyUrl,
				array (
					'secret' => $this->_secret,
					'remoteip' => $remoteIp,
					'v' => self::$_version,
					'response' => $response
				)
			);
			$answers = json_decode($getResponse, true);
			$recaptchaResponse = new ReCaptchaResponse();
	
			if (trim($answers ['success']) == true) {
				$recaptchaResponse->success = true;
			} else {
				$recaptchaResponse->success = false;
				$recaptchaResponse->errorCodes = $answers [error-codes];
			}
	
			return $recaptchaResponse;
		}
	}
}