UNPKG

whitelist-ips

Version:

Connect middleware for whitelisting by IP addresses.

100 lines (86 loc) 2.48 kB
// 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);