main, geoip: Add GeoIP lookup support for watcher info

Mon, 04 Jan 2016 16:27:00 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 04 Jan 2016 16:27:00 +0000
changeset 16
d35376a53644
parent 15
67858d731518
child 17
dd2a570367a9

main, geoip: Add GeoIP lookup support for watcher info

geoip.lua file | annotate | diff | comparison | revisions
main.lua file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/geoip.lua	Mon Jan 04 16:27:00 2016 +0000
@@ -0,0 +1,24 @@
+pcall(function ()
+	local city_db_path = os.getenv("GEOIP_CITY_DB");
+	if not city_db_path then return; end
+	
+	local city_db = assert(require "geoip.city".open(city_db_path));
+	
+	events.add_handler("new-client", function (info)
+		local ip = info.conn:ip();
+		local location = city_db:query_by_addr(ip);
+		if location then
+			local l = {};
+			if location.city_name then
+				table.insert(l, location.city_name);
+			end
+			if location.region then
+				table.insert(l, location.region);
+			end
+			if location.country_name then
+				table.insert(l, location.country_name);
+			end
+			conn.location = table.concat(l, ", ");
+		end
+	end);
+end)
--- a/main.lua	Mon Jan 04 16:23:57 2016 +0000
+++ b/main.lua	Mon Jan 04 16:27:00 2016 +0000
@@ -9,6 +9,7 @@
 events = require "util.events".new();
 
 require "clients";
+require "geoip";
 
 local function printf(source, level, fmt, ...) return print(source, level, fmt:format(...)); end
 for _, level in ipairs{"debug", "info", "warn", "error"} do

mercurial