Software /
code /
prosody-modules
Changeset
1778:32604bf33a4c
mod_register_web: Switch to the new reCAPTCHA API, including support for "nocaptcha" when users are already signed in to Google.
author | Thijs Alkemade <me@thijsalkema.de> |
---|---|
date | Wed, 04 Mar 2015 12:57:24 +0100 |
parents | 1777:c353acd1d366 |
children | 1779:bdf1de953fd9 |
files | mod_register_web/mod_register_web.lua mod_register_web/templates/recaptcha.html |
diffstat | 2 files changed, 28 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_register_web/mod_register_web.lua Mon Aug 10 21:13:31 2015 +0200 +++ b/mod_register_web/mod_register_web.lua Wed Mar 04 12:57:24 2015 +0100 @@ -3,6 +3,8 @@ local usermanager = require "core.usermanager"; local http = require "net.http"; local path_sep = package.config:sub(1,1); +local json = require "util.json".decode; +local t_concat = table.concat; module:depends"http"; @@ -47,19 +49,18 @@ })); end function verify_captcha(request, form, callback) - http.request("https://www.google.com/recaptcha/api/verify", { + http.request("https://www.google.com/recaptcha/api/siteverify", { body = http.formencode { - privatekey = captcha_options.recaptcha_private_key; + secret = captcha_options.recaptcha_private_key; remoteip = request.conn:ip(); - challenge = form.recaptcha_challenge_field; - response = form.recaptcha_response_field; + response = form["g-recaptcha-response"]; }; }, function (verify_result, code) - local verify_ok, verify_err = verify_result:match("^([^\n]+)\n([^\n]+)"); - if verify_ok == "true" then + local result = json(verify_result); + if result.success == true then callback(true); else - callback(false, verify_err) + callback(false, t_concat(result["error-codes"])); end end); end
--- a/mod_register_web/templates/recaptcha.html Mon Aug 10 21:13:31 2015 +0200 +++ b/mod_register_web/templates/recaptcha.html Wed Mar 04 12:57:24 2015 +0100 @@ -1,11 +1,26 @@ <tr> <td colspan="2"> - <script src="https://www.google.com/recaptcha/api/challenge?k={recaptcha_public_key}" type="text/javascript"></script> + <script src="https://www.google.com/recaptcha/api.js" async defer></script> + <div class="g-recaptcha" data-sitekey="{recaptcha_public_key}"></div> <noscript> - <iframe frameborder="0" height="300" src="https://www.google.com/recaptcha/api/noscript?k={recaptcha_public_key}{recaptcha_display_error}" width="500"></iframe> - <br> - <textarea cols="40" name="recaptcha_challenge_field" rows="3"></textarea> - <input name="recaptcha_response_field" type="hidden" value="manual_challenge"> + <div style="width: 302px; height: 352px;"> + <div style="width: 302px; height: 352px; position: relative;"> + <div style="width: 302px; height: 352px; position: absolute;"> + <iframe src="https://www.google.com/recaptcha/api/fallback?k={recaptcha_public_key}" + frameborder="0" scrolling="no" + style="width: 302px; height:352px; border-style: none;"> + </iframe> + </div> + <div style="width: 250px; height: 80px; position: absolute; border-style: none; + bottom: 21px; left: 25px; margin: 0px; padding: 0px; right: 25px;"> + <textarea id="g-recaptcha-response" name="g-recaptcha-response" + class="g-recaptcha-response" + style="width: 250px; height: 80px; border: 1px solid #c1c1c1; + margin: 0px; padding: 0px; resize: none;" value=""> + </textarea> + </div> + </div> + </div> </noscript> </td> </tr>