support for Google reCAPTCHA
This commit is contained in:
		
							parent
							
								
									cb5f5bb3d2
								
							
						
					
					
						commit
						bcf888423b
					
				|  | @ -1368,4 +1368,30 @@ function unformatShortFormatToSeconds($text) { | ||||||
| 	return $text; | 	return $text; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Validates the Google reCAPTCHA input. | ||||||
|  |  * | ||||||
|  |  * @param String $secretKey secret key | ||||||
|  |  * @return boolean valid | ||||||
|  |  */ | ||||||
|  | function validateReCAPTCHA($secretKey) { | ||||||
|  | 	$url = 'https://www.google.com/recaptcha/api/siteverify'; | ||||||
|  | 	$vars = array('secret' => $secretKey, 'response' => $_POST['g-recaptcha-response']); | ||||||
|  | 	$options = array( | ||||||
|  | 		'http' => array( | ||||||
|  | 			'header'  => "Content-type: application/x-www-form-urlencoded\r\n", | ||||||
|  | 			'method'  => 'POST', | ||||||
|  | 			'content' => http_build_query($vars) | ||||||
|  | 		) | ||||||
|  | 	); | ||||||
|  | 	$context = stream_context_create($options); | ||||||
|  | 	$result = file_get_contents($url, false, $context); | ||||||
|  | 	if ($result === FALSE) { | ||||||
|  | 		logNewMessage(LOG_ERR, 'reCAPTCHA validation failed, invalid server response.'); | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | 	$responseJSON = json_decode($result); | ||||||
|  | 	return $responseJSON->{'success'} === true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| ?>
 | ?>
 | ||||||
|  |  | ||||||
|  | @ -2999,6 +2999,55 @@ class htmlJavaScript extends htmlElement { | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Creates a Script element to integrate external JavaScript files. | ||||||
|  |  * | ||||||
|  |  * @package metaHTML | ||||||
|  |  */ | ||||||
|  | class htmlScript extends htmlElement { | ||||||
|  | 
 | ||||||
|  | 	/** src value */ | ||||||
|  | 	private $src = null; | ||||||
|  | 	/** is async */ | ||||||
|  | 	private $async = false; | ||||||
|  | 	/** execute after page is parsed */ | ||||||
|  | 	private $defer = false; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Constructor. | ||||||
|  | 	 * | ||||||
|  | 	 * @param String $src script path | ||||||
|  | 	 * @param boolean $isAsync script will be executed while the page continues the parsing (default true) | ||||||
|  | 	 * @param boolean $isDeferred script is executed when the page has finished parsing (default true) | ||||||
|  | 	 */ | ||||||
|  | 	function __construct($src, $isAsync = true, $isDeferred = true) { | ||||||
|  | 		$this->src = $src; | ||||||
|  | 		$this->async = $isAsync; | ||||||
|  | 		$this->defer = $isDeferred; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Prints the HTML code for this element. | ||||||
|  | 	 * | ||||||
|  | 	 * @param string $module Name of account module | ||||||
|  | 	 * @param array $input List of meta-HTML elements | ||||||
|  | 	 * @param array $values List of values which override the defaults in $input (name => value) | ||||||
|  | 	 * @param boolean $restricted If true then no buttons will be displayed | ||||||
|  | 	 * @param integer $tabindex Start value of tabulator index for input fields | ||||||
|  | 	 * @param string $scope Account type | ||||||
|  | 	 * @return array List of input field names and their type (name => type) | ||||||
|  | 	 */ | ||||||
|  | 	function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { | ||||||
|  | 		$return = array(); | ||||||
|  | 		$async = $this->async ? ' async' : ''; | ||||||
|  | 		$defer = $this->defer ? ' defer="defer"' : ''; | ||||||
|  | 		echo '<script src="' . $this->src . '"' . $async . $defer . '>'; | ||||||
|  | 		echo '</script>'; | ||||||
|  | 		return $return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Sets all given elements to the same width. |  * Sets all given elements to the same width. | ||||||
|  * |  * | ||||||
|  | @ -3266,6 +3315,44 @@ class htmlAccordion extends htmlElement { | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Creates a Google reCAPTCHA element. | ||||||
|  |  * | ||||||
|  |  * @package metaHTML | ||||||
|  |  */ | ||||||
|  | class htmlReCAPTCHA extends htmlElement { | ||||||
|  | 
 | ||||||
|  | 	/** site key */ | ||||||
|  | 	private $key = null; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Constructor. | ||||||
|  | 	 * | ||||||
|  | 	 * @param String $key site key | ||||||
|  | 	 */ | ||||||
|  | 	function __construct($key) { | ||||||
|  | 		$this->key = htmlspecialchars($key); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Prints the HTML code for this element. | ||||||
|  | 	 * | ||||||
|  | 	 * @param string $module Name of account module | ||||||
|  | 	 * @param array $input List of meta-HTML elements | ||||||
|  | 	 * @param array $values List of values which override the defaults in $input (name => value) | ||||||
|  | 	 * @param boolean $restricted If true then no buttons will be displayed | ||||||
|  | 	 * @param integer $tabindex Start value of tabulator index for input fields | ||||||
|  | 	 * @param string $scope Account type | ||||||
|  | 	 * @return array List of input field names and their type (name => type) | ||||||
|  | 	 */ | ||||||
|  | 	function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { | ||||||
|  | 		$script = new htmlScript('https://www.google.com/recaptcha/api.js'); | ||||||
|  | 		$script->generateHTML($module, $input, $values, $restricted, $tabindex, $scope); | ||||||
|  | 		echo '<div class="g-recaptcha" data-sitekey="' . $this->key . '"></div>'; | ||||||
|  | 		return array(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Responsive row with 12 column layout. |  * Responsive row with 12 column layout. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue