Merge pull request #25 from lamassu/minor-fixes

Minor fixes
This commit is contained in:
Josh Harvey 2014-08-04 19:24:57 -04:00
commit 7ab3152e9c
3 changed files with 34 additions and 27 deletions

View file

@ -47,10 +47,9 @@ module.exports = function (options) {
app.use(express.bodyParser()); app.use(express.bodyParser());
if (!options.https) { var authMiddleware;
server = http.createServer(app);
} if (options.https) {
else {
var serverOptions = { var serverOptions = {
key: options.https.key, key: options.https.key,
cert: options.https.cert, cert: options.https.cert,
@ -61,30 +60,28 @@ module.exports = function (options) {
}; };
server = https.createServer(serverOptions, app); server = https.createServer(serverOptions, app);
}
var authMiddleware = function (req, res, next) {
req.device = {};
return next();
};
if (options.https) {
authMiddleware = function(req, res, next) { authMiddleware = function(req, res, next) {
var fingerprint = req.connection.getPeerCertificate().fingerprint; config.isAuthorized(routes.getFingerprint(req), function (err, device) {
if (err) {
config.isAuthorized(fingerprint, function (err, device) {
if (err) {
res.json({err: 'Internal Server Error'}); res.json({err: 'Internal Server Error'});
return next(err); return next(err);
} }
if (!device) { if (!device) {
res.statusCode = 404; res.json(404, {err: 'Not Found'});
res.json({err: 'Not Found'}); return next(new Error('Device is unpaired'));
return next(new Error('Device is unpaired'));
} }
next(); next();
}); });
}; };
} else {
server = http.createServer(app);
authMiddleware = function (req, res, next) {
req.device = {};
return next();
};
} }
routes.init(app, config, trader, authMiddleware); routes.init(app, config, trader, authMiddleware);

View file

@ -4,6 +4,11 @@ var _trader;
var _lamassuConfig; var _lamassuConfig;
var logger = require('./logger'); var logger = require('./logger');
module.exports = {
init: init,
getFingerprint: getFingerprint
};
// Make sure these are higher than polling interval // Make sure these are higher than polling interval
// or there will be a lot of errors // or there will be a lot of errors
var STALE_TICKER = 180000; var STALE_TICKER = 180000;
@ -18,13 +23,13 @@ Error.prototype.toJSON = function () {
return ret; return ret;
}; };
var poll = function(req, res) { function poll(req, res) {
var rateRec = _trader.rate(); var rateRec = _trader.rate();
var balanceRec = _trader.balance; var balanceRec = _trader.balance;
var fingerprint = getFingerprint(req); var fingerprint = getFingerprint(req);
logger.debug('poll request from: %s', fingerprint); logger.debug('poll request from: %s', fingerprint);
// `rateRec` and `balanceRec` are both objects, so there's no danger // `rateRec` and `balanceRec` are both objects, so there's no danger
// of misinterpreting rate or balance === 0 as 'Server initializing'. // of misinterpreting rate or balance === 0 as 'Server initializing'.
if (!rateRec || !balanceRec) { if (!rateRec || !balanceRec) {
@ -54,13 +59,13 @@ var poll = function(req, res) {
}); });
}; };
var trade = function (req, res) { function trade(req, res) {
var fingerprint = getFingerprint(req); var fingerprint = getFingerprint(req);
_trader.trade(req.body, fingerprint); _trader.trade(req.body, fingerprint);
res.json({err: null}); res.json({err: null});
}; };
var send = function(req, res) { function send(req, res) {
var fingerprint = getFingerprint(req); var fingerprint = getFingerprint(req);
_trader.sendBitcoins(fingerprint, req.body, function(err, txHash) { _trader.sendBitcoins(fingerprint, req.body, function(err, txHash) {
res.json({ res.json({
@ -71,7 +76,7 @@ var send = function(req, res) {
}); });
}; };
var pair = function(req, res) { function pair(req, res) {
var token = req.body.token; var token = req.body.token;
var name = req.body.name; var name = req.body.name;
@ -89,7 +94,7 @@ var pair = function(req, res) {
); );
}; };
exports.init = function(app, config, trader, authMiddleware) { function init(app, config, trader, authMiddleware) {
_lamassuConfig = config; _lamassuConfig = config;
_trader = trader; _trader = trader;
@ -102,6 +107,6 @@ exports.init = function(app, config, trader, authMiddleware) {
}; };
function getFingerprint(req) { function getFingerprint(req) {
return req.connection.getPeerCertificate && return typeof req.connection.getPeerCertificate === 'function' &&
req.connection.getPeerCertificate().fingerprint; req.connection.getPeerCertificate().fingerprint;
} };

View file

@ -21,7 +21,12 @@ var Trader = module.exports = function (db) {
}; };
Trader.prototype._findExchange = function (name) { Trader.prototype._findExchange = function (name) {
return require('lamassu-' + name); try {
return require('lamassu-' + name);
} catch(_) {
throw new Error(name + ' module is not installed. Try running `npm install --save lamassu-' + name + '` first');
}
}; };
Trader.prototype._findTicker = function (name) { Trader.prototype._findTicker = function (name) {