From 461fda09be6eca7de21036c4c5bf90f6dbd270fa Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Wed, 20 Aug 2014 14:40:56 -0400 Subject: [PATCH] create ratelimiter plugin --- README.md | 1 + config/config.js | 2 ++ insight.js | 28 ++++++++++++++-------------- package.json | 2 ++ plugins/mailbox.js | 1 + plugins/ratelimiter.js | 10 ++++++++++ 6 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 plugins/ratelimiter.js diff --git a/README.md b/README.md index c949c887..d31a9b92 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ INSIGHT_DB # Path where to store insight's internal DB. (defaults to INSIGHT_SAFE_CONFIRMATIONS=6 # Nr. of confirmation needed to start caching transaction information INSIGHT_IGNORE_CACHE # True to ignore cache of spents in transaction, with more than INSIGHT_SAFE_CONFIRMATIONS confirmations. This is useful for tracking double spents for old transactions. ENABLE_MAILBOX # if "true" will enable mailbox plugin +ENABLE_RATELIMITER # if "true" will enable the ratelimiter plugin LOGGER_LEVEL # defaults to 'info', can be 'debug','verbose','error', etc. ``` diff --git a/config/config.js b/config/config.js index f3941acc..8e1fbbeb 100644 --- a/config/config.js +++ b/config/config.js @@ -77,6 +77,7 @@ var bitcoindConf = { }; var enableMailbox = process.env.ENABLE_MAILBOX === 'true'; +var enableRatelimiter = process.env.ENABLE_RATELIMITER === 'true'; var loggerLevel = process.env.LOGGER_LEVEL || 'info'; if (!fs.existsSync(db)) { @@ -91,6 +92,7 @@ if (!fs.existsSync(db)) { module.exports = { enableMailbox: enableMailbox, + enableRatelimiter: enableRatelimiter, loggerLevel: loggerLevel, version: version, root: rootPath, diff --git a/insight.js b/insight.js index 9dbbc8f1..d278e801 100755 --- a/insight.js +++ b/insight.js @@ -4,15 +4,13 @@ //Set the node enviornment variable if not set before process.env.NODE_ENV = process.env.NODE_ENV || 'development'; -/** - * Module dependencies. - */ -var express = require('express'), - fs = require('fs'), - PeerSync = require('./lib/PeerSync'), - HistoricSync = require('./lib/HistoricSync'); +var fs = require('fs'); +var PeerSync = require('./lib/PeerSync'); +var HistoricSync = require('./lib/HistoricSync'); + +var express = require('express'); +var connect = require('connect'); -//Initializing system variables var config = require('./config/config'); // text title @@ -54,14 +52,12 @@ console.log( config.bitcoind.dataDir + (config.network === 'testnet' ? '*' : ''), (config.network === 'testnet' ? '* (/testnet3 is added automatically)' : '') ); -/** - * express app - */ + + +// create express app var expressApp = express(); -/** - * Bootstrap models - */ +// Bootstrap models var models_path = __dirname + '/app/models'; var walk = function(path) { fs.readdirSync(path).forEach(function(file) { @@ -127,6 +123,10 @@ if (config.enableMailbox) { require('./plugins/mailbox').init(ios, config.mailbox); } +if (config.enableRatelimiter) { + require('./plugins/ratelimiter').init(expressApp, config.ratelimiter); +} + //Start the app by listening on server.listen(config.port, function() { console.log('insight server listening on port %d in %s mode', server.address().port, process.env.NODE_ENV); diff --git a/package.json b/package.json index e7644776..409826d1 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,8 @@ "bufferput": "git://github.com/bitpay/node-bufferput.git", "buffertools": "*", "commander": "*", + "connect": "^2.25.7", + "connect-ratelimit": "0.0.6", "express": "~3.4.7", "glob": "*", "leveldown": "*", diff --git a/plugins/mailbox.js b/plugins/mailbox.js index 75cfdb9a..74d62f52 100644 --- a/plugins/mailbox.js +++ b/plugins/mailbox.js @@ -5,6 +5,7 @@ var preconditions = require('preconditions').singleton(); var io; module.exports.init = function(ext_io, config) { + logger.info('Using mailbox plugin'); preconditions.checkArgument(ext_io); io = ext_io; io.sockets.on('connection', function(socket) { diff --git a/plugins/ratelimiter.js b/plugins/ratelimiter.js new file mode 100644 index 00000000..5628b8de --- /dev/null +++ b/plugins/ratelimiter.js @@ -0,0 +1,10 @@ +var logger = require('../lib/logger').logger; +var preconditions = require('preconditions').singleton(); + +var limiter = require('connect-ratelimit'); + +module.exports.init = function(app, config) { + preconditions.checkArgument(app); + logger.info('Using ratelimiter plugin'); + +};