| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | #!/usr/bin/env node | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-26 19:16:36 -04:00
										 |  |  | process.on('unhandledRejection', error => { | 
					
						
							| 
									
										
										
										
											2017-10-22 22:56:42 -04:00
										 |  |  |     // this makes sure that stacktrace of failed promise is printed out | 
					
						
							| 
									
										
										
										
											2017-10-26 19:16:36 -04:00
										 |  |  |     console.log(error); | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // but also try to log it into file | 
					
						
							| 
									
										
										
										
											2017-10-26 19:16:36 -04:00
										 |  |  |     require('../services/log').info(error); | 
					
						
							| 
									
										
										
										
											2017-10-22 22:56:42 -04:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  | const app = require('../app'); | 
					
						
							|  |  |  | const debug = require('debug')('node:server'); | 
					
						
							| 
									
										
										
										
											2017-11-16 23:55:50 -05:00
										 |  |  | const fs = require('fs'); | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  | const http = require('http'); | 
					
						
							| 
									
										
										
										
											2017-11-16 23:55:50 -05:00
										 |  |  | const https = require('https'); | 
					
						
							| 
									
										
										
										
											2017-11-16 23:06:16 -05:00
										 |  |  | const config = require('../services/config'); | 
					
						
							|  |  |  | const log = require('../services/log'); | 
					
						
							| 
									
										
										
										
											2017-11-21 00:25:53 -05:00
										 |  |  | const app_info = require('../services/app_info'); | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 23:06:16 -05:00
										 |  |  | const port = normalizePort(config['Network']['port'] || '3000'); | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | app.set('port', port); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Create HTTP server. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-11-16 23:55:50 -05:00
										 |  |  | let server; | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 23:55:50 -05:00
										 |  |  | if (config['Network']['https']) { | 
					
						
							|  |  |  |     const options = { | 
					
						
							|  |  |  |         key: fs.readFileSync(config['Network']['keyPath']), | 
					
						
							|  |  |  |         cert: fs.readFileSync(config['Network']['certPath']) | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     server = https.createServer(options, app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     log.info("App HTTPS server starting up at port " + port); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | else { | 
					
						
							|  |  |  |     server = http.createServer(app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     log.info("App HTTP server starting up at port " + port); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-11-16 23:06:16 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-21 00:25:53 -05:00
										 |  |  | log.info(JSON.stringify(app_info, null, 2)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Listen on provided port, on all network interfaces. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | server.listen(port); | 
					
						
							|  |  |  | server.on('error', onError); | 
					
						
							|  |  |  | server.on('listening', onListening); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Normalize a port into a number, string, or false. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function normalizePort(val) { | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     const port = parseInt(val, 10); | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     if (isNaN(port)) { | 
					
						
							|  |  |  |         // named pipe | 
					
						
							|  |  |  |         return val; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     if (port >= 0) { | 
					
						
							|  |  |  |         // port number | 
					
						
							|  |  |  |         return port; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     return false; | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Event listener for HTTP server "error" event. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function onError(error) { | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     if (error.syscall !== 'listen') { | 
					
						
							|  |  |  |         throw error; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const bind = typeof port === 'string' | 
					
						
							|  |  |  |         ? 'Pipe ' + port | 
					
						
							|  |  |  |         : 'Port ' + port; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // handle specific listen errors with friendly messages | 
					
						
							|  |  |  |     switch (error.code) { | 
					
						
							|  |  |  |         case 'EACCES': | 
					
						
							|  |  |  |             console.error(bind + ' requires elevated privileges'); | 
					
						
							|  |  |  |             process.exit(1); | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         case 'EADDRINUSE': | 
					
						
							|  |  |  |             console.error(bind + ' is already in use'); | 
					
						
							|  |  |  |             process.exit(1); | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             throw error; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Event listener for HTTP server "listening" event. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function onListening() { | 
					
						
							| 
									
										
										
										
											2017-10-25 22:39:21 -04:00
										 |  |  |     const addr = server.address(); | 
					
						
							|  |  |  |     const bind = typeof addr === 'string' | 
					
						
							|  |  |  |         ? 'pipe ' + addr | 
					
						
							|  |  |  |         : 'port ' + addr.port; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     debug('Listening on ' + bind); | 
					
						
							| 
									
										
										
										
											2017-10-14 23:31:44 -04:00
										 |  |  | } |