web-app-runner
Advanced tools
Comparing version 0.90.18 to 0.90.19
#!/usr/bin/env node | ||
var opts = { | ||
var opts = { | ||
port:3001, | ||
whiteList:[ | ||
'10.1.10.10' | ||
], | ||
blackList:[ | ||
'127.9.9.9', | ||
'10.1.10.144' | ||
], | ||
acceptUnknownVisitor:true | ||
}, | ||
ip:{ | ||
whiteList:[ | ||
'10.1.10.10' | ||
], | ||
blackList:[ | ||
'127.9.9.9', | ||
'10.1.10.144' | ||
], | ||
acceptUnknownVisitor:true | ||
} | ||
}, | ||
runner = require( '../lib/WebAppRunner' ).createInstance( opts ); | ||
@@ -15,0 +17,0 @@ |
@@ -17,7 +17,18 @@ /** | ||
rejectThrottleTime = options.rejectThrottleTime || 5000, | ||
rejectPage = options.rejectPage, | ||
acceptUnknownVisitor = dash.isBoolean( options.acceptUnknownVisitor ) ? options.acceptUnknownVisitor : true, | ||
whiteList = options.whiteList, | ||
blackList = options.blackList; | ||
rejectPage, | ||
acceptUnknownVisitor = true, | ||
whiteList, | ||
blackList; | ||
if (options.ip) { | ||
whiteList = options.ip.whiteList; | ||
blackList = options.ip.blackList; | ||
if (dash.isBoolean( options.acceptUnknownVisitor )) { | ||
acceptUnknownVisitor = options.ip.acceptUnknownVisitor; | ||
} | ||
rejectPage = options.ip.rejectPage; | ||
} | ||
this.authorize = function(request, response, next) { | ||
@@ -77,6 +88,4 @@ var visitor = request.visitor; | ||
this.isWhiteList = function(visitor) { | ||
if (whiteList) { | ||
var idx = whiteList.indexOf( visitor.ip ); | ||
log.info('ip: ', visitor.ip, ', idx: ', idx); | ||
return (idx >= 0); | ||
if (whiteList && visitor.ip) { | ||
return findMatch( visitor.ip, whiteList ); | ||
} | ||
@@ -94,4 +103,4 @@ | ||
this.isBlackList = function(visitor) { | ||
if (blackList) { | ||
return blackList.indexOf( visitor.ip ) >= 0; | ||
if (blackList && visitor.ip) { | ||
return findMatch( visitor.ip, blackList ); | ||
} | ||
@@ -102,2 +111,14 @@ | ||
var findMatch = function(ip, list) { | ||
var match = false; | ||
list.forEach(function(rx) { | ||
if (ip.match( rx )) { | ||
match = true; | ||
} | ||
}); | ||
return match; | ||
}; | ||
/** | ||
@@ -129,2 +150,11 @@ * reject this request with a very slow non-error response... | ||
this.__protected = function() { | ||
return { | ||
whiteList:whiteList, | ||
blackList:blackList, | ||
acceptUnknownVisitor:acceptUnknownVisitor, | ||
rejectPage:rejectPage | ||
}; | ||
}; | ||
// constructor validations | ||
@@ -131,0 +161,0 @@ if (!log) throw new Error('socket server must be constructed with a log'); |
{ | ||
"name": "web-app-runner", | ||
"version": "0.90.18", | ||
"version": "0.90.19", | ||
"description": "A simple HTTP application server that accepts or rejects connections based on authenticated attributes including ip, user agent, etc. The server can be used stand alone or as middleware for connect or express.", | ||
@@ -5,0 +5,0 @@ "main": "./index.js", |
@@ -29,3 +29,4 @@ # Web App Runner | ||
var configFile = __dirname + '/config.json', | ||
// IP & agent white/black lists defined in config | ||
var configFile = __dirname + '/config.js', | ||
logfile = process.env.HOME + '/logs/web-app.log', | ||
@@ -38,4 +39,2 @@ log = require('simple-node-logger').createRollingFileLogger( logfile ), | ||
home:'./', | ||
whiteListFile:__dirname + '/whitelist.json', | ||
blackListFile:__dirname + '/blacklist.json', | ||
runAsDaemon:true, | ||
@@ -65,7 +64,8 @@ clustered:true | ||
whiteList:[ | ||
'127.0.0.1', | ||
'173.13.151.[1-127]' | ||
/^127\.0\.0\.1/, | ||
/^173\.13\.151\.1/ | ||
], | ||
blackList:[ | ||
'193.144.151.180' | ||
/^193\.144\.151\.1/, | ||
/^193\.144\.151\.2/ | ||
], | ||
@@ -79,3 +79,3 @@ acceptUnkownVisitor:true | ||
Or better yet, define the white and black lists in files and set the refresh rate. This way, the lists are refreshed when the lists change. | ||
Or better yet, define the white and black lists in the config file and set the refresh rate. This way, the lists are refreshed when they change. | ||
@@ -89,12 +89,12 @@ ### Agent Filter | ||
whiteList:[ | ||
'chrome/[23][0-9]', | ||
'msie 1[0-1]', | ||
'safari/[7-8]', | ||
'safari/534' | ||
/chrome/[23][0-9]/, | ||
/msie 1[0-1]/, | ||
/safari/[7-8]/, | ||
/safari/534/ | ||
], | ||
blackList:[ | ||
'msie [2-9]', | ||
'safari/[2-5] | ||
'chrome/2[0-6]' | ||
'chrome/1[0-9]' | ||
/msie [2-9]/, | ||
/safari/[2-5]/ | ||
/chrome/2[0-6]/ | ||
/chrome/1[0-9]/ | ||
], | ||
@@ -118,2 +118,2 @@ acceptUnkownAgent:true, | ||
- - - | ||
<p><small><em>Copyright © 2014, rain city software | Version 0.90.18</em></small></p> | ||
<p><small><em>Copyright © 2014, rain city software | Version 0.90.19</em></small></p> |
@@ -10,2 +10,3 @@ /** | ||
log = require('simple-node-logger' ).createSimpleLogger(), | ||
Dataset = require('./fixtures/TestDataset' ), | ||
IPFilter = require('../lib/IPFilter'); | ||
@@ -16,3 +17,9 @@ | ||
var createOptions = function() { | ||
var createOptions, | ||
dataset = new Dataset(); | ||
// suppress the log statements | ||
log.setLevel('fatal'); | ||
createOptions = function() { | ||
var opts = {}; | ||
@@ -22,2 +29,4 @@ | ||
opts.ip = dataset.createIPOptions(); | ||
return opts; | ||
@@ -33,3 +42,4 @@ }; | ||
'isBlackList', | ||
'reject' | ||
'reject', | ||
'__protected' | ||
]; | ||
@@ -40,2 +50,6 @@ | ||
filter.should.be.instanceof( IPFilter ); | ||
filter.__protected().whiteList.length.should.equal( 2 ); | ||
filter.__protected().blackList.length.should.equal( 3 ); | ||
filter.__protected().acceptUnknownVisitor.should.equal( true ); | ||
}); | ||
@@ -53,5 +67,71 @@ | ||
describe('authorize', function() { | ||
it('should authorize a known ip address'); | ||
it('should reject a known ip address'); | ||
var filter = new IPFilter( createOptions() ); | ||
it('should authorize a known ip address', function(done) { | ||
var request = {}, | ||
response = {}, | ||
next; | ||
request.visitor = dataset.getAuthorizedVisitor(); | ||
next = function() { | ||
done(); | ||
}; | ||
filter.authorize( request, response, next ); | ||
}); | ||
it('should reject a known ip address', function(done) { | ||
var request = {}, | ||
response = {}, | ||
next; | ||
request.visitor = dataset.getRejectedVisitor(); | ||
next = function() { | ||
throw new Error('should reject ip: ' + request.visitor.ip); | ||
}; | ||
filter.reject = function(request, response) { | ||
done(); | ||
}; | ||
filter.authorize( request, response, next ); | ||
}); | ||
}); | ||
describe('isWhiteList', function() { | ||
var filter = new IPFilter( createOptions() ); | ||
it('should return true for a known good ip', function() { | ||
var visitor = dataset.getAuthorizedVisitor(); | ||
filter.isWhiteList( visitor ).should.equal( true ); | ||
}); | ||
it('should return false for an unrecognized ip', function() { | ||
var visitor = dataset.getAuthorizedVisitor(); | ||
visitor.ip = '255.255.255.255'; | ||
filter.isWhiteList( visitor ).should.equal( false ); | ||
}); | ||
}); | ||
describe('isBlackList', function() { | ||
var filter = new IPFilter( createOptions() ); | ||
it('should return true for a known reject ip', function() { | ||
var visitor = dataset.getRejectedVisitor(); | ||
filter.isBlackList( visitor ).should.equal( true ); | ||
}); | ||
it('should return false for an ip not in the black list', function() { | ||
var visitor = dataset.getRejectedVisitor(); | ||
visitor.ip = '127.0.0.1'; | ||
filter.isBlackList( visitor ).should.equal( false ); | ||
}); | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
24755
18
573