From be41e4e5189e6107e05a18f69eae3c4b2dfb8604 Mon Sep 17 00:00:00 2001 From: Jeff Webster Date: Sun, 4 Mar 2018 01:07:37 -0500 Subject: [PATCH] MDL-48501 form/recaptcha: update to use reCAPTCHA v2 --- lib/form/recaptcha.php | 78 +++++++++--------------------------------- 1 file changed, 16 insertions(+), 62 deletions(-) diff --git a/lib/form/recaptcha.php b/lib/form/recaptcha.php index 87b3d2a8a8d..2eb732624e8 100644 --- a/lib/form/recaptcha.php +++ b/lib/form/recaptcha.php @@ -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 .= ' -'; - - 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; }