whitelist-ips
Version:
Connect middleware for whitelisting by IP addresses.
100 lines (86 loc) • 2.48 kB
JavaScript
// Generated by CoffeeScript 1.11.1
(function() {
var Whitelist, WhitelistIpError, fs, ipRangeCheck;
fs = require('fs');
ipRangeCheck = require('ip-range-check');
WhitelistIpError = function(message) {
var e;
e = new Error;
e.name = "WhitelistIpError";
e.message = message;
return e;
};
Whitelist = (function() {
Whitelist.ranges = [];
function Whitelist(init) {
if (init instanceof Array) {
this.loadFromArray(init);
} else if (typeof init === "string") {
if (/^common/.test(init)) {
this.loadFromFile(__dirname + '/' + init);
} else {
this.loadFromFile(init);
}
} else {
throw Error("whitelist-ips Error: Unrecognized argument type " + (typeof init));
}
}
Whitelist.prototype.loadFromArray = function(lines) {
var line;
return this.ranges = (function() {
var i, len, results;
results = [];
for (i = 0, len = lines.length; i < len; i++) {
line = lines[i];
if (line.trim() !== '') {
results.push(line.trim());
}
}
return results;
})();
};
Whitelist.prototype.loadFromFile = function(path) {
return fs.readFile(path, 'utf8', (function(_this) {
return function(err, data) {
if (err != null) {
return console.warn("whitelist-ips Error: ", err);
}
return _this.loadFromArray(data.split('\n'));
};
})(this));
};
Whitelist.prototype.middleware = function(req, res, next) {
var ip;
ip = req.ip;
if (ipRangeCheck(ip, this.ranges)) {
return next();
} else {
return next(WhitelistIpError("IP " + ip + " not in whitelist"));
}
};
Whitelist.prototype.test = function(list) {
var i, ip, len, results;
results = [];
for (i = 0, len = list.length; i < len; i++) {
ip = list[i];
results.push(this.middleware({
ip: ip
}, null, (function(_this) {
return function(err) {
if (err != null) {
return console.log(ip + " Failed");
}
return console.log(ip + " Passed");
};
})(this)));
}
return results;
};
return Whitelist;
})();
module.exports = function(init) {
var wl;
wl = new Whitelist(init);
return wl.middleware.bind(wl);
};
}).call(this);