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