bitcore-wallet-service/lib/wsapp.js

80 lines
2.0 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');
var express = require('express');
var querystring = require('querystring');
var bodyParser = require('body-parser')
var Uuid = require('uuid');
var WalletService = require('./server');
log.debug = log.verbose;
log.level = 'debug';
var subscriptions = {};
var WsApp = function() {};
2015-03-23 15:07:06 -07:00
WsApp._unauthorized = function() {
socket.emit('unauthorized');
socket.disconnect();
};
2015-03-30 08:40:58 -07:00
WsApp.subscribeAddresses = function(walletId, addresses) {
console.log('*** [wsapp.js ln27] subscribing:', addresses, walletId); // TODO
_.each([].concat(addresses), function(address) {
subscriptions[address] = walletId;
});
};
WsApp.subscribeWallet = function(serviceInstance) {
// TODO: optimize!
serviceInstance.getMainAddresses({}, function(err, addresses) {
if (err) {
log.warn('Could not subscribe to addresses for wallet ' + serviceInstance.walletId);
return;
}
WsApp.subscribeAddress(_.pluck(addresses, 'address'), serviceInstance.walletId);
});
};
2015-03-23 14:26:47 -07:00
WsApp.start = function(server) {
var self = this;
var io = require('socket.io')(server);
WalletService.onNotification(function(serviceInstance, args) {
2015-03-30 08:40:58 -07:00
var walletId = serviceInstance.walletId || args.walletId;
if (!walletId) return;
if (args.type == 'NewAddress') {
WsApp.subscribeAddress(walletId, args.address);
2015-03-30 07:33:38 -07:00
}
2015-03-30 08:40:58 -07:00
io.to(walletId).emit('notification', args);
2015-03-23 14:26:47 -07:00
});
io.on('connection', function(socket) {
socket.nonce = Uuid.v4();
socket.emit('challenge', socket.nonce);
socket.on('authorize', function(data) {
2015-03-23 15:07:06 -07:00
if (data.message != socket.nonce) return WsApp.unauthorized();
2015-03-23 14:26:47 -07:00
WalletService.getInstanceWithAuth(data, function(err, res) {
2015-03-23 15:07:06 -07:00
if (err) return WsApp.unauthorized();
socket.join(res.walletId);
2015-03-23 14:26:47 -07:00
socket.emit('authorized');
2015-03-30 08:40:58 -07:00
WsApp.subscribeWallet(res);
2015-03-23 14:26:47 -07:00
});
});
});
};
module.exports = WsApp;