changeset 3724:1c3c7d73c5a6

mod_register_web: Fix to use real client IP in case of proxy forwarding (thanks Sebastian) mod_http since Prosody 0.11 will process the `X-Forwarded-For` header and store the result in `request.ip`.
author Kim Alvefur <zash@zash.se>
date Fri, 01 Nov 2019 17:15:29 +0100
parents 427879b46061
children 19e43b7a969d
files mod_register_web/mod_register_web.lua
diffstat 1 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mod_register_web/mod_register_web.lua	Fri Nov 01 14:08:10 2019 +0100
+++ b/mod_register_web/mod_register_web.lua	Fri Nov 01 17:15:29 2019 +0100
@@ -39,6 +39,8 @@
 local register_tpl = get_template "register";
 local success_tpl = get_template "success";
 
+-- COMPAT `or request.conn:ip()`
+
 if next(captcha_options) ~= nil then
 	local recaptcha_tpl = get_template "recaptcha";
 
@@ -57,7 +59,7 @@
 		http.request("https://www.google.com/recaptcha/api/siteverify", {
 			body = http.formencode {
 				secret = captcha_options.recaptcha_private_key;
-				remoteip = request.conn:ip();
+				remoteip = request.ip or request.conn:ip();
 				response = form["g-recaptcha-response"];
 			};
 		}, function (verify_result, code)
@@ -137,7 +139,7 @@
 	if usermanager.user_exists(prepped_username, module.host) then
 		return nil, "Username already taken";
 	end
-	local registering = { username = prepped_username , host = module.host, additional = form, ip = origin.conn:ip(), allowed = true }
+	local registering = { username = prepped_username , host = module.host, additional = form, ip = origin.ip or origin.conn:ip(), allowed = true }
 	module:fire_event("user-registering", registering);
 	if not registering.allowed then
 		return nil, registering.reason or "Registration not allowed";
@@ -162,7 +164,7 @@
 			username = prepped_username,
 			host = module.host,
 			source = module.name,
-			ip = origin.conn:ip(),
+			ip = origin.ip or origin.conn:ip(),
 		});
 	end
 	return jid, err;