99 lines
2.2 KiB
JavaScript
99 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
var http = require('http');
|
|
var https = require('https');
|
|
var express = require('express');
|
|
var LamassuConfig = require('lamassu-config');
|
|
var routes = require('./routes');
|
|
var plugins = require('./plugins');
|
|
var db = require('./postgresql_interface');
|
|
var logger = require('./logger');
|
|
require('longjohn');
|
|
|
|
module.exports = function(options) {
|
|
var app = express();
|
|
var connectionString;
|
|
var server;
|
|
var lamassuConfig;
|
|
|
|
connectionString = options.postgres ||
|
|
'postgres://lamassu:lamassu@localhost/lamassu';
|
|
|
|
lamassuConfig = new LamassuConfig(connectionString);
|
|
|
|
db.init(connectionString);
|
|
plugins.init(db);
|
|
|
|
lamassuConfig.load(function(err, config) {
|
|
if (err) {
|
|
logger.error('Loading config failed');
|
|
throw err;
|
|
}
|
|
|
|
plugins.configure(config);
|
|
plugins.startPolling();
|
|
});
|
|
|
|
lamassuConfig.on('configUpdate', function() {
|
|
lamassuConfig.load(function(err, config) {
|
|
if (err) {
|
|
return logger.error('Error while reloading config');
|
|
}
|
|
|
|
plugins.configure(config);
|
|
logger.info('Config reloaded');
|
|
});
|
|
});
|
|
|
|
app.use(express.bodyParser());
|
|
|
|
var authMiddleware;
|
|
|
|
if (options.https) {
|
|
var serverOptions = {
|
|
key: options.https.key,
|
|
cert: options.https.cert,
|
|
requestCert: true,
|
|
secureProtocol: 'TLSv1_method',
|
|
ciphers: 'AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH',
|
|
honorCipherOrder: true
|
|
};
|
|
|
|
server = https.createServer(serverOptions, app);
|
|
|
|
authMiddleware = function(req, res, next) {
|
|
lamassuConfig.isAuthorized(routes.getFingerprint(req), function(err,
|
|
device) {
|
|
if (err) {
|
|
res.json({err: 'Internal Server Error'});
|
|
return next(err);
|
|
}
|
|
if (!device) {
|
|
res.json(404, {err: 'Not Found'});
|
|
return next(new Error('Device is unpaired'));
|
|
}
|
|
next();
|
|
});
|
|
};
|
|
|
|
} else {
|
|
server = http.createServer(app);
|
|
|
|
authMiddleware = function(req, res, next) {
|
|
req.device = {};
|
|
return next();
|
|
};
|
|
}
|
|
|
|
if (options.mock) logger.info('In mock mode');
|
|
|
|
routes.init({
|
|
app: app,
|
|
lamassuConfig: lamassuConfig,
|
|
plugins: plugins,
|
|
authMiddleware: authMiddleware,
|
|
mock: options.mock
|
|
});
|
|
|
|
return server;
|
|
};
|