89 lines
2 KiB
JavaScript
89 lines
2 KiB
JavaScript
var https = require("https");
|
|
var path = require("path");
|
|
var fs = require("fs");
|
|
var domain = require("domain");
|
|
var Logger = require("./logger");
|
|
|
|
function retrieveIPs(cb) {
|
|
var options = {
|
|
host: "www.dan.me.uk",
|
|
port: 443,
|
|
path: "/torlist/",
|
|
method: "GET"
|
|
};
|
|
|
|
var finish = function (status, data) {
|
|
if (status !== 200) {
|
|
cb(new Error("Failed to retrieve Tor IP list (HTTP " + status + ")"), null);
|
|
return;
|
|
}
|
|
|
|
var ips = data.split("\n");
|
|
cb(false, ips);
|
|
};
|
|
|
|
var d = domain.create();
|
|
d.on("error", function (err) {
|
|
if (err.trace)
|
|
Logger.errlog.log(err.trace());
|
|
else
|
|
Logger.errlog.log(err);
|
|
});
|
|
|
|
d.run(function () {
|
|
var req = https.request(options, function (res) {
|
|
var buffer = "";
|
|
res.setEncoding("utf-8");
|
|
res.on("data", function (data) { buffer += data; });
|
|
res.on("end", function () { finish(res.statusCode, buffer); });
|
|
});
|
|
|
|
req.end();
|
|
});
|
|
}
|
|
|
|
function getTorIPs(cb) {
|
|
retrieveIPs(function (err, ips) {
|
|
if (!err) {
|
|
cb(false, ips);
|
|
fs.writeFile(path.join(__dirname, "..", "torlist"),
|
|
ips.join("\n"));
|
|
return;
|
|
}
|
|
|
|
fs.readFile(path.join(__dirname, "..", "torlist"), function (err, data) {
|
|
if (err) {
|
|
cb(err, null);
|
|
return;
|
|
}
|
|
|
|
data = (""+data).split("\n");
|
|
cb(false, data);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = function () {
|
|
var x = {
|
|
ipList: [],
|
|
shouldBlockIP: function (ip) {
|
|
return this.ipList.indexOf(ip) >= 0;
|
|
}
|
|
};
|
|
|
|
var init = function () {
|
|
getTorIPs(function (err, ips) {
|
|
if (err) {
|
|
Logger.errlog.log(err);
|
|
return;
|
|
}
|
|
|
|
Logger.syslog.log("Loaded Tor IP list");
|
|
x.ipList = ips;
|
|
});
|
|
};
|
|
|
|
init();
|
|
return x;
|
|
};
|