bitcore-wallet-service/lib/wsapp.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

2015-03-23 14:26:47 -07:00
'use strict';
var $ = require('preconditions').singleton();
var _ = require('lodash');
var async = require('async');
var log = require('npmlog');
2015-03-30 15:44:16 -07:00
log.debug = log.verbose;
2015-03-23 14:26:47 -07:00
var Uuid = require('uuid');
var WalletService = require('./server');
2015-05-06 06:28:47 -07:00
var MessageBroker = require('./messagebroker');
2015-03-23 14:26:47 -07:00
log.level = 'debug';
var WsApp = function() {};
2015-05-06 12:26:43 -07:00
WsApp.prototype._unauthorized = function(socket) {
2015-03-23 15:07:06 -07:00
socket.emit('unauthorized');
socket.disconnect();
};
2015-05-06 12:26:43 -07:00
WsApp.prototype._handleNotification = function(notification) {
this.io.to(notification.walletId).emit('notification', notification);
2015-05-04 14:23:56 -07:00
};
2015-05-06 12:26:43 -07:00
WsApp.prototype.start = function(server, opts, cb) {
2015-05-05 09:04:29 -07:00
opts = opts || {};
2015-05-06 06:28:47 -07:00
$.checkState(opts.messageBrokerOpts);
2015-05-05 09:04:29 -07:00
2015-05-06 12:26:43 -07:00
var self = this;
this.io = require('socket.io')(server);
2015-03-23 14:26:47 -07:00
2015-05-04 14:23:56 -07:00
async.series([
2015-03-23 15:07:06 -07:00
2015-05-04 14:23:56 -07:00
function(done) {
2015-05-06 12:26:43 -07:00
self.messageBroker = new MessageBroker(opts.messageBrokerOpts);
self.messageBroker.onMessage(_.bind(self._handleNotification, self));
2015-05-06 06:28:47 -07:00
done();
2015-05-04 14:23:56 -07:00
},
function(done) {
2015-05-06 12:26:43 -07:00
self.io.on('connection', function(socket) {
2015-05-04 14:23:56 -07:00
socket.nonce = Uuid.v4();
socket.on('authorize', function(data) {
2015-05-06 12:26:43 -07:00
if (data.message != socket.nonce) return self._unauthorized(socket);
2015-03-23 15:07:06 -07:00
2015-05-04 14:23:56 -07:00
WalletService.getInstanceWithAuth(data, function(err, service) {
2015-05-06 12:26:43 -07:00
if (err) return self._unauthorized(socket);
2015-03-30 08:40:58 -07:00
2015-05-04 14:23:56 -07:00
socket.join(service.walletId);
socket.emit('authorized');
});
2015-03-31 08:04:02 -07:00
});
2015-05-04 14:23:56 -07:00
socket.emit('challenge', socket.nonce);
2015-03-23 14:26:47 -07:00
});
2015-05-07 10:16:24 -07:00
done();
2015-05-04 14:23:56 -07:00
},
], function(err) {
if (cb) return cb(err);
2015-03-23 14:26:47 -07:00
});
};
module.exports = WsApp;