diff --git a/lib/services/web.js b/lib/services/web.js index af773b87..5f809806 100644 --- a/lib/services/web.js +++ b/lib/services/web.js @@ -1,15 +1,19 @@ 'use strict'; +var fs = require('fs'); var http = require('http'); var https = require('https'); var express = require('express'); var bodyParser = require('body-parser'); var socketio = require('socket.io'); -var BaseService = require('../service'); var inherits = require('util').inherits; + +var BaseService = require('../service'); +var bitcore = require('bitcore-lib'); +var _ = bitcore.deps._; var index = require('../'); var log = index.log; -var fs = require('fs'); + /** * This service represents a hub for combining several services over a single HTTP port. Services @@ -32,6 +36,9 @@ var WebService = function(options) { this.httpsOptions = options.httpsOptions || this.node.httpsOptions; this.port = options.port || this.node.port || 3456; + this.enableSocketRPC = _.isUndefined(options.enableSocketRPC) ? + WebService.DEFAULT_SOCKET_RPC : options.enableSocketRPC; + this.node.on('ready', function() { self.eventNames = self.getEventNames(); self.setupAllRoutes(); @@ -43,6 +50,7 @@ var WebService = function(options) { inherits(WebService, BaseService); WebService.dependencies = []; +WebService.DEFAULT_SOCKET_RPC = true; /** * Called by Node to start the service @@ -157,7 +165,9 @@ WebService.prototype.getEventNames = function() { WebService.prototype.socketHandler = function(socket) { var bus = this.node.openBus(); - socket.on('message', this.socketMessageHandler.bind(this)); + if (this.enableSocketRPC) { + socket.on('message', this.socketMessageHandler.bind(this)); + } socket.on('subscribe', function(name, params) { bus.subscribe(name, params); diff --git a/test/services/web.unit.js b/test/services/web.unit.js index 4bc5760f..5415af2d 100644 --- a/test/services/web.unit.js +++ b/test/services/web.unit.js @@ -36,6 +36,19 @@ var WebService = proxyquire('../../lib/services/web', {http: httpStub, https: ht describe('WebService', function() { var defaultNode = new EventEmitter(); + describe('@constructor', function() { + it('will set socket rpc settings', function() { + var web = new WebService({node: defaultNode, enableSocketRPC: false}); + web.enableSocketRPC.should.equal(false); + + var web2 = new WebService({node: defaultNode, enableSocketRPC: true}); + web2.enableSocketRPC.should.equal(true); + + var web3 = new WebService({node: defaultNode}); + web3.enableSocketRPC.should.equal(WebService.DEFAULT_SOCKET_RPC); + }); + }); + describe('#start', function() { beforeEach(function() { httpStub.createServer.reset(); @@ -236,6 +249,19 @@ describe('WebService', function() { socket.emit('message', 'data'); }); + it('on message should NOT call socketMessageHandler if not enabled', function(done) { + web = new WebService({node: node, enableSocketRPC: false}); + web.eventNames = web.getEventNames(); + web.socketMessageHandler = sinon.stub(); + socket = new EventEmitter(); + web.socketHandler(socket); + socket.on('message', function() { + web.socketMessageHandler.callCount.should.equal(0); + done(); + }); + socket.emit('message', 'data'); + }); + it('on subscribe should call bus.subscribe', function(done) { bus.subscribe = function(param1) { param1.should.equal('data');