Mercurial > prosody-modules
comparison mod_register_web/mod_register_web.lua @ 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 | c56baec031e8 |
children | c8161146c698 |
comparison
equal
deleted
inserted
replaced
1777:c353acd1d366 | 1778:32604bf33a4c |
---|---|
1 local captcha_options = module:get_option("captcha_options", {}); | 1 local captcha_options = module:get_option("captcha_options", {}); |
2 local nodeprep = require "util.encodings".stringprep.nodeprep; | 2 local nodeprep = require "util.encodings".stringprep.nodeprep; |
3 local usermanager = require "core.usermanager"; | 3 local usermanager = require "core.usermanager"; |
4 local http = require "net.http"; | 4 local http = require "net.http"; |
5 local path_sep = package.config:sub(1,1); | 5 local path_sep = package.config:sub(1,1); |
6 local json = require "util.json".decode; | |
7 local t_concat = table.concat; | |
6 | 8 |
7 module:depends"http"; | 9 module:depends"http"; |
8 | 10 |
9 local extra_fields = { | 11 local extra_fields = { |
10 nick = true; name = true; first = true; last = true; email = true; | 12 nick = true; name = true; first = true; last = true; email = true; |
45 module:log("error", "Missing parameter from captcha_options: %s", k); | 47 module:log("error", "Missing parameter from captcha_options: %s", k); |
46 end | 48 end |
47 })); | 49 })); |
48 end | 50 end |
49 function verify_captcha(request, form, callback) | 51 function verify_captcha(request, form, callback) |
50 http.request("https://www.google.com/recaptcha/api/verify", { | 52 http.request("https://www.google.com/recaptcha/api/siteverify", { |
51 body = http.formencode { | 53 body = http.formencode { |
52 privatekey = captcha_options.recaptcha_private_key; | 54 secret = captcha_options.recaptcha_private_key; |
53 remoteip = request.conn:ip(); | 55 remoteip = request.conn:ip(); |
54 challenge = form.recaptcha_challenge_field; | 56 response = form["g-recaptcha-response"]; |
55 response = form.recaptcha_response_field; | |
56 }; | 57 }; |
57 }, function (verify_result, code) | 58 }, function (verify_result, code) |
58 local verify_ok, verify_err = verify_result:match("^([^\n]+)\n([^\n]+)"); | 59 local result = json(verify_result); |
59 if verify_ok == "true" then | 60 if result.success == true then |
60 callback(true); | 61 callback(true); |
61 else | 62 else |
62 callback(false, verify_err) | 63 callback(false, t_concat(result["error-codes"])); |
63 end | 64 end |
64 end); | 65 end); |
65 end | 66 end |
66 else | 67 else |
67 module:log("debug", "No Recaptcha options set, using fallback captcha") | 68 module:log("debug", "No Recaptcha options set, using fallback captcha") |