mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-48501 form/recaptcha: update to use reCAPTCHA v2
This commit is contained in:
parent
caae082025
commit
be41e4e518
@ -46,9 +46,6 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templata
|
||||
/** @var string html for help button, if empty then no help */
|
||||
var $_helpbutton='';
|
||||
|
||||
/** @var bool if true, recaptcha will be servered from https */
|
||||
var $_https=false;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
@ -58,14 +55,8 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templata
|
||||
* or an associative array
|
||||
*/
|
||||
public function __construct($elementName = null, $elementLabel = null, $attributes = null) {
|
||||
global $CFG;
|
||||
parent::__construct($elementName, $elementLabel, $attributes);
|
||||
$this->_type = 'recaptcha';
|
||||
if (is_https()) {
|
||||
$this->_https = true;
|
||||
} else {
|
||||
$this->_https = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -79,49 +70,15 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templata
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the recaptcha element in HTML
|
||||
* Returns the reCAPTCHA element in HTML
|
||||
*
|
||||
* @return string
|
||||
* @return string The HTML to render
|
||||
*/
|
||||
function toHtml() {
|
||||
global $CFG, $PAGE;
|
||||
require_once $CFG->libdir . '/recaptchalib.php';
|
||||
public function toHtml() {
|
||||
global $CFG;
|
||||
require_once($CFG->libdir . '/recaptchalib_v2.php');
|
||||
|
||||
$recaptureoptions = Array('theme'=>'custom', 'custom_theme_widget'=>'recaptcha_widget');
|
||||
$html = html_writer::script(js_writer::set_variable('RecaptchaOptions', $recaptureoptions));
|
||||
|
||||
$attributes = $this->getAttributes();
|
||||
if (empty($attributes['error_message'])) {
|
||||
$attributes['error_message'] = null;
|
||||
$this->setAttributes($attributes);
|
||||
}
|
||||
$error = $attributes['error_message'];
|
||||
unset($attributes['error_message']);
|
||||
|
||||
$strincorrectpleasetryagain = get_string('incorrectpleasetryagain', 'auth');
|
||||
$strenterthewordsabove = get_string('enterthewordsabove', 'auth');
|
||||
$strenterthenumbersyouhear = get_string('enterthenumbersyouhear', 'auth');
|
||||
$strgetanothercaptcha = get_string('getanothercaptcha', 'auth');
|
||||
$strgetanaudiocaptcha = get_string('getanaudiocaptcha', 'auth');
|
||||
$strgetanimagecaptcha = get_string('getanimagecaptcha', 'auth');
|
||||
|
||||
$html .= '
|
||||
<div id="recaptcha_widget" style="display:none">
|
||||
|
||||
<div id="recaptcha_image"></div>
|
||||
<div class="recaptcha_only_if_incorrect_sol" style="color:red">' . $strincorrectpleasetryagain . '</div>
|
||||
|
||||
<span class="recaptcha_only_if_image"><label for="recaptcha_response_field">' . $strenterthewordsabove . '</label></span>
|
||||
<span class="recaptcha_only_if_audio"><label for="recaptcha_response_field">' . $strenterthenumbersyouhear . '</label></span>
|
||||
|
||||
<input type="text" id="recaptcha_response_field" name="recaptcha_response_field" class="text-ltr" />
|
||||
<input type="hidden" name="recaptcha_element" value="dummyvalue" /> <!-- Dummy value to fool formslib -->
|
||||
<div><a href="javascript:Recaptcha.reload()">' . $strgetanothercaptcha . '</a></div>
|
||||
<div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type(\'audio\')">' . $strgetanaudiocaptcha . '</a></div>
|
||||
<div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type(\'image\')">' . $strgetanimagecaptcha . '</a></div>
|
||||
</div>';
|
||||
|
||||
return $html . recaptcha_get_html($CFG->recaptchapublickey, $error, $this->_https);
|
||||
return recaptcha_get_challenge_html(RECAPTCHA_API_URL, $CFG->recaptchapublickey);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -134,25 +91,22 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templata
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks input and challenged field
|
||||
* Checks recaptcha response with Google.
|
||||
*
|
||||
* @param string $challenge_field recaptcha shown to user
|
||||
* @param string $response_field input value by user
|
||||
* @param string $responsestr
|
||||
* @return bool
|
||||
*/
|
||||
function verify($challenge_field, $response_field) {
|
||||
public function verify($responsestr) {
|
||||
global $CFG;
|
||||
require_once $CFG->libdir . '/recaptchalib.php';
|
||||
$response = recaptcha_check_answer($CFG->recaptchaprivatekey,
|
||||
getremoteaddr(),
|
||||
$challenge_field,
|
||||
$response_field,
|
||||
$this->_https);
|
||||
if (!$response->is_valid) {
|
||||
require_once($CFG->libdir . '/recaptchalib_v2.php');
|
||||
|
||||
$response = recaptcha_check_response(RECAPTCHA_VERIFY_URL, $CFG->recaptchaprivatekey,
|
||||
getremoteaddr(), $responsestr);
|
||||
if (!$response['isvalid']) {
|
||||
$attributes = $this->getAttributes();
|
||||
$attributes['error_message'] = $response->error;
|
||||
$attributes['error_message'] = $response['error'];
|
||||
$this->setAttributes($attributes);
|
||||
return $response->error;
|
||||
return $response['error'];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user