support for Google reCAPTCHA
This commit is contained in:
		
							parent
							
								
									cb5f5bb3d2
								
							
						
					
					
						commit
						bcf888423b
					
				|  | @ -1368,4 +1368,30 @@ function unformatShortFormatToSeconds($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. | ||||
|  * | ||||
|  | @ -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. | ||||
|  */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue