UNPKG

drp-mesh

Version:
80 lines (69 loc) 2.64 kB
'use strict'; const https = require('https'); const express = require('express'); const expressWs = require('express-ws'); const cors = require('cors'); const fs = require('fs'); class DRP_WebServerConfig { constructor(port, bindingIP, sslEnabled, sslKeyFile, sslCrtFile, sslCrtFilePwd) { this.Port = port; this.BindingIP = bindingIP; this.SSLEnabled = sslEnabled; this.SSLKeyFile = sslKeyFile; this.SSLCrtFile = sslCrtFile; this.SSLCrtFilePwd = sslCrtFilePwd; } } // Instantiate Express instance class DRP_WebServer { /** * * @param {DRP_WebServerConfig} webServerConfig Web Server Configuration */ constructor(webServerConfig) { let thisDRPWebServer = this; // Setup the Express web server this.config = webServerConfig; /** @type {Server} */ this.server = null; this.expressApp = express(); this.expressApp.use(cors()); let wsMaxPayload = 512 * 1024 * 1024; // Is SSL enabled? if (thisDRPWebServer.config.SSLEnabled) { let optionsExpress = { key: fs.readFileSync(thisDRPWebServer.config.SSLKeyFile), cert: fs.readFileSync(thisDRPWebServer.config.SSLCrtFile), passphrase: thisDRPWebServer.config.SSLCrtFilePwd, requestCert: true, rejectUnauthorized: false }; let httpsServer = https.createServer(optionsExpress, thisDRPWebServer.expressApp); expressWs(thisDRPWebServer.expressApp, httpsServer, { wsOptions: { maxPayload: wsMaxPayload } }); thisDRPWebServer.server = httpsServer; } else { expressWs(thisDRPWebServer.expressApp, null, { wsOptions: { maxPayload: wsMaxPayload } }); thisDRPWebServer.server = thisDRPWebServer.expressApp; } if (webServerConfig.AuthHook) { webServerConfig.AuthHook(thisDRPWebServer.expressApp) } } start() { let thisDRPWebServer = this; return new Promise(function (resolve, reject) { try { let bindingIP = thisDRPWebServer.config.BindingIP || '0.0.0.0'; thisDRPWebServer.server.listen(thisDRPWebServer.config.Port, bindingIP, function () { resolve(null); }); } catch (err) { reject(err); } }); } } module.exports = { DRP_WebServer: DRP_WebServer, DRP_WebServerConfig: DRP_WebServerConfig }