plugins/mod_http.lua
changeset 8597 b4a0bc46c82d
parent 7871 11fcdef5022f
child 8599 71da54c7f797
--- a/plugins/mod_http.lua	Sun Mar 11 06:01:19 2018 +0100
+++ b/plugins/mod_http.lua	Thu Mar 15 17:22:49 2018 +0100
@@ -150,6 +150,31 @@
 	end
 end
 
+local trusted_proxies = module:get_option_set("trusted_proxies", { "127.0.0.1", "::1" })._items;
+
+local function get_ip_from_request(request)
+	local ip = request.conn:ip();
+	local forwarded_for = request.headers.x_forwarded_for;
+	if forwarded_for then
+		forwarded_for = forwarded_for..", "..ip;
+		for forwarded_ip in forwarded_for:gmatch("[^%s,]+") do
+			if not trusted_proxies[forwarded_ip] then
+				ip = forwarded_ip;
+			end
+		end
+	end
+	return ip;
+end
+
+module:wrap_object_event(server, false, function (handlers, event_name, event_data)
+	local request = event_data.request;
+	if request then
+		-- Not included in eg http-error events
+		request.ip = get_ip_from_request(request);
+	end
+	return handlers(event_name, event_data);
+end);
+
 module:provides("net", {
 	name = "http";
 	listener = server.listener;