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") |