Mercurial > prosody-modules
comparison mod_register_web/mod_register_web.lua @ 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 | f9a93d7b6c50 |
children | 19e43b7a969d |
comparison
equal
deleted
inserted
replaced
3723:427879b46061 | 3724:1c3c7d73c5a6 |
---|---|
37 end | 37 end |
38 | 38 |
39 local register_tpl = get_template "register"; | 39 local register_tpl = get_template "register"; |
40 local success_tpl = get_template "success"; | 40 local success_tpl = get_template "success"; |
41 | 41 |
42 -- COMPAT `or request.conn:ip()` | |
43 | |
42 if next(captcha_options) ~= nil then | 44 if next(captcha_options) ~= nil then |
43 local recaptcha_tpl = get_template "recaptcha"; | 45 local recaptcha_tpl = get_template "recaptcha"; |
44 | 46 |
45 function generate_captcha(display_options) | 47 function generate_captcha(display_options) |
46 return recaptcha_tpl.apply(setmetatable({ | 48 return recaptcha_tpl.apply(setmetatable({ |
55 end | 57 end |
56 function verify_captcha(request, form, callback) | 58 function verify_captcha(request, form, callback) |
57 http.request("https://www.google.com/recaptcha/api/siteverify", { | 59 http.request("https://www.google.com/recaptcha/api/siteverify", { |
58 body = http.formencode { | 60 body = http.formencode { |
59 secret = captcha_options.recaptcha_private_key; | 61 secret = captcha_options.recaptcha_private_key; |
60 remoteip = request.conn:ip(); | 62 remoteip = request.ip or request.conn:ip(); |
61 response = form["g-recaptcha-response"]; | 63 response = form["g-recaptcha-response"]; |
62 }; | 64 }; |
63 }, function (verify_result, code) | 65 }, function (verify_result, code) |
64 local result = json(verify_result); | 66 local result = json(verify_result); |
65 if not result then | 67 if not result then |
135 return nil, "The username field was empty"; | 137 return nil, "The username field was empty"; |
136 end | 138 end |
137 if usermanager.user_exists(prepped_username, module.host) then | 139 if usermanager.user_exists(prepped_username, module.host) then |
138 return nil, "Username already taken"; | 140 return nil, "Username already taken"; |
139 end | 141 end |
140 local registering = { username = prepped_username , host = module.host, additional = form, ip = origin.conn:ip(), allowed = true } | 142 local registering = { username = prepped_username , host = module.host, additional = form, ip = origin.ip or origin.conn:ip(), allowed = true } |
141 module:fire_event("user-registering", registering); | 143 module:fire_event("user-registering", registering); |
142 if not registering.allowed then | 144 if not registering.allowed then |
143 return nil, registering.reason or "Registration not allowed"; | 145 return nil, registering.reason or "Registration not allowed"; |
144 end | 146 end |
145 if confirm_password ~= password then | 147 if confirm_password ~= password then |
160 end | 162 end |
161 module:fire_event("user-registered", { | 163 module:fire_event("user-registered", { |
162 username = prepped_username, | 164 username = prepped_username, |
163 host = module.host, | 165 host = module.host, |
164 source = module.name, | 166 source = module.name, |
165 ip = origin.conn:ip(), | 167 ip = origin.ip or origin.conn:ip(), |
166 }); | 168 }); |
167 end | 169 end |
168 return jid, err; | 170 return jid, err; |
169 end | 171 end |
170 | 172 |