mod_register_web/mod_register_web.lua
changeset 1782 32604bf33a4c
parent 1622 c56baec031e8
child 2737 c8161146c698
equal deleted inserted replaced
1781:c353acd1d366 1782: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")