commit
7ab3152e9c
3 changed files with 34 additions and 27 deletions
33
lib/app.js
33
lib/app.js
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
};
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue