Software /
code /
prosody
Comparison
plugins/mod_http.lua @ 11407:8d6e013377fa 0.11
mod_http: Restore ip field for requests without proxies
8603011e51fe optimized out more than just the loop, leaving the .ip
field blank when the request wasn't from a proxy.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 27 Feb 2021 20:45:45 +0100 |
parent | 11386:e40ba204c612 |
child | 11408:1b6298e7b550 |
comparison
equal
deleted
inserted
replaced
11386:e40ba204c612 | 11407:8d6e013377fa |
---|---|
159 local trusted_proxies = module:get_option_set("trusted_proxies", { "127.0.0.1", "::1" })._items; | 159 local trusted_proxies = module:get_option_set("trusted_proxies", { "127.0.0.1", "::1" })._items; |
160 | 160 |
161 local function get_ip_from_request(request) | 161 local function get_ip_from_request(request) |
162 local ip = request.conn:ip(); | 162 local ip = request.conn:ip(); |
163 local forwarded_for = request.headers.x_forwarded_for; | 163 local forwarded_for = request.headers.x_forwarded_for; |
164 if forwarded_for then | 164 if forwarded_for and trusted_proxies[ip] then |
165 forwarded_for = forwarded_for..", "..ip; | 165 forwarded_for = forwarded_for..", "..ip; |
166 for forwarded_ip in forwarded_for:gmatch("[^%s,]+") do | 166 for forwarded_ip in forwarded_for:gmatch("[^%s,]+") do |
167 if not trusted_proxies[forwarded_ip] then | 167 if not trusted_proxies[forwarded_ip] then |
168 ip = forwarded_ip; | 168 ip = forwarded_ip; |
169 end | 169 end |
172 return ip; | 172 return ip; |
173 end | 173 end |
174 | 174 |
175 module:wrap_object_event(server._events, false, function (handlers, event_name, event_data) | 175 module:wrap_object_event(server._events, false, function (handlers, event_name, event_data) |
176 local request = event_data.request; | 176 local request = event_data.request; |
177 if request and trusted_proxies[request.conn:ip()] then | 177 if request then |
178 -- Not included in eg http-error events | 178 -- Not included in eg http-error events |
179 request.ip = get_ip_from_request(request); | 179 request.ip = get_ip_from_request(request); |
180 end | 180 end |
181 return handlers(event_name, event_data); | 181 return handlers(event_name, event_data); |
182 end); | 182 end); |