bitcore-wallet-service/bws.js

93 lines
2.6 KiB
JavaScript
Raw Normal View History

2015-02-19 06:00:14 -08:00
#!/usr/bin/env node
2015-02-13 11:07:47 -08:00
2015-05-07 12:45:17 -07:00
var async = require('async');
2015-04-15 12:25:31 -07:00
var fs = require('fs');
2015-02-19 06:00:14 -08:00
var ExpressApp = require('./lib/expressapp');
2015-03-23 14:26:47 -07:00
var WsApp = require('./lib/wsapp');
2015-04-05 09:56:56 -07:00
var config = require('./config');
2015-04-15 14:34:48 -07:00
var sticky = require('sticky-session');
2015-04-18 02:55:24 -07:00
var log = require('npmlog');
log.debug = log.verbose;
log.disableColor();
2015-04-15 14:34:48 -07:00
2015-02-13 11:07:47 -08:00
2015-04-15 06:59:25 -07:00
var port = process.env.BWS_PORT || config.port || 3232;
2015-02-09 10:30:16 -08:00
2015-04-15 11:56:08 -07:00
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
2015-04-15 15:38:51 -07:00
var clusterInstances = config.clusterInstances || numCPUs;
2015-04-15 12:25:31 -07:00
var serverModule = config.https ? require('https') : require('http');
2015-04-15 15:38:51 -07:00
2015-04-15 12:25:31 -07:00
var serverOpts = {};
if (config.https) {
serverOpts.key = fs.readFileSync(config.privateKeyFile || './ssl/privatekey.pem');
serverOpts.cert = fs.readFileSync(config.certificateFile || './ssl/certificate.pem');
2016-02-21 06:41:05 -08:00
serverOpts.ciphers = 'ECDHE-RSA-AES256-SHA:AES256-SHA:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM';
serverOpts.honorCipherOrder = true;
// This sets the intermediate CA certs only if they have all been designated in the config.js
if (config.CAinter1 && config.CAinter2 && config.CAroot) {
serverOpts.ca = [fs.readFileSync(config.CAinter1),
2016-02-21 06:41:05 -08:00
fs.readFileSync(config.CAinter2),
fs.readFileSync(config.CAroot)
];
};
2015-04-15 12:25:31 -07:00
}
2015-03-23 08:50:00 -07:00
2015-04-21 10:43:35 -07:00
var start = function(cb) {
2015-05-07 12:45:17 -07:00
var expressApp = new ExpressApp();
var wsApp = new WsApp();
function doStart(cb) {
var server = config.https ? serverModule.createServer(serverOpts, expressApp.app) : serverModule.Server(expressApp.app);
async.parallel([
function(done) {
expressApp.start(config, done);
},
function(done) {
wsApp.start(server, config, done);
},
], function(err) {
if (err) {
log.error('Could not start BWS instance', err);
}
if (cb) return cb(err);
});
return server;
};
2015-04-15 15:38:51 -07:00
if (config.cluster) {
2015-05-07 12:45:17 -07:00
var server = sticky(clusterInstances, function() {
return doStart();
2015-04-21 10:43:35 -07:00
});
2015-04-28 07:00:50 -07:00
return cb(null, server);
2015-04-21 10:43:35 -07:00
} else {
2015-05-07 12:45:17 -07:00
var server = doStart(function(err) {
return cb(err, server);
2015-04-15 11:56:08 -07:00
});
2015-05-07 12:45:17 -07:00
}
2015-04-15 15:38:51 -07:00
};
2015-04-20 16:46:45 -07:00
if (config.cluster && !config.lockOpts.lockerServer)
throw 'When running in cluster mode, locker server need to be configured';
2015-04-15 15:38:51 -07:00
2015-05-07 10:16:24 -07:00
if (config.cluster && !config.messageBrokerOpts.messageBrokerServer)
throw 'When running in cluster mode, message broker server need to be configured';
2015-04-28 07:00:50 -07:00
start(function(err, server) {
if (err) {
console.log('Could not start BWS:', err);
process.exit(0);
}
2015-04-21 10:43:35 -07:00
server.listen(port, function(err) {
if (err) console.log('ERROR: ', err);
log.info('Bitcore Wallet Service running on port ' + port);
});
});