endo-core
Version:
Put some description here
112 lines (96 loc) • 3.84 kB
text/coffeescript
bodyParser = require 'body-parser'
cookieParser = require 'cookie-parser'
cookieSession = require 'cookie-session'
cors = require 'cors'
errorHandler = require 'errorhandler'
express = require 'express'
meshbluHealthcheck = require 'express-meshblu-healthcheck'
expressVersion = require 'express-package-version'
sendError = require 'express-send-error'
_ = require 'lodash'
MeshbluHttp = require 'meshblu-http'
morgan = require 'morgan'
path = require 'path'
passport = require 'passport'
favicon = require 'serve-favicon'
Router = require './router'
debug = require('debug')('endo-core:server')
class Server
constructor: (options) ->
{
= 'https://meshblu.octoblu.com/publickey'
} = options
throw new Error('apiStrategy is required') unless ?
throw new Error('appOctobluHost is required') unless ?
throw new Error('meshbluConfig is required') unless ?
throw new Error('octobluStrategy is required') unless ?
throw new Error('serviceUrl is required') unless ?
throw new Error('userDeviceManagerUrl is required') unless ?
throw new Error('messageRouter is required') unless ?
throw new Error('messagesService is required') unless ?
throw new Error('credentialsDeviceService is required') unless ?
throw new Error 'healthcheckService is required' unless ?
throw new Error 'healthcheckService.healthcheck is not a function (and must be)' unless _.isFunction .healthcheck
address: =>
.address()
run: (callback) =>
debug 'running server'
meshblu = new MeshbluHttp _.cloneDeep()
meshblu.getServerPublicKey (error, publicKey) =>
if error?
console.error "Error fetching public key: #{error.message}"
process.exit 1
return
passport.serializeUser (user, done) => done null, user
passport.deserializeUser (user, done) => done null, user
passport.use 'octoblu',
passport.use 'api',
app = express()
app.use favicon path.join(__dirname, '../favicon.ico')
app.use meshbluHealthcheck()
app.use expressVersion format: '{"version": "%s"}'
app.use morgan 'dev', immediate: false unless
app.use cors(exposedHeaders: ['Location'])
app.use errorHandler()
app.use cookieSession secret: .token
app.use cookieParser()
app.use passport.initialize()
app.use passport.session()
app.use bodyParser.urlencoded limit: '1mb', extended : true
app.use bodyParser.json limit : '1mb'
app.use sendError {}
app.options '*', cors()
router = new Router {
meshbluPublicKey: publicKey
}
router.route app
= app.listen , callback
stop: (callback) =>
.close callback
module.exports = Server