lamassu-server/lib/app.js
2016-12-10 00:11:34 +02:00

77 lines
1.8 KiB
JavaScript

const fs = require('fs')
const http = require('http')
const https = require('https')
const express = require('express')
const argv = require('minimist')(process.argv.slice(2))
const routes = require('./routes')
const logger = require('./logger')
const poller = require('./poller')
const verifySchema = require('./verify-schema')
const settingsLoader = require('./settings-loader')
const options = require('./options')
const devMode = argv.dev || argv.http || options.http
function run () {
let count = 0
const errorHandler = err => {
count += 1
logger.error(err)
logger.error('[%d] Retrying in 10s...', count)
}
const runner = () => runOnce()
.then(() => clearInterval(handler))
.catch(errorHandler)
const handler = setInterval(runner, 10000)
return runner()
}
function runOnce () {
const app = express()
const localApp = express()
return verifySchema.valid()
.then(() => settingsLoader.loadLatest())
.then(settings => {
poller.start(settings)
const httpsServerOptions = {
key: fs.readFileSync(options.keyPath),
cert: fs.readFileSync(options.certPath),
requestCert: true
}
const server = devMode
? http.createServer(app)
: https.createServer(httpsServerOptions, app)
const port = 3000
const localPort = 3030
const localServer = http.createServer(localApp)
if (options.devMode) logger.info('In dev mode')
const opts = {
app,
localApp,
devMode
}
routes.init(opts)
server.listen(port, () => {
console.log('lamassu-server listening on port ' +
port + ' ' + (devMode ? '(http)' : '(https)'))
})
localServer.listen(localPort, 'localhost', () => {
console.log('lamassu-server listening on local port ' + localPort)
})
})
}
module.exports = {run}