const fs = require('fs'); const util = require('util'); const https = require('https'); const promise = util.promisify; const stat = promise(fs.stat); module.exports = (app) => { const httpsCerts = { private: process.env.SSL_PRIV_KEY_PATH || '/etc/ssl/certs/dashy-priv.key', public: process.env.SSL_PUB_KEY_PATH || '/etc/ssl/certs/dashy-pub.pem', }; const isDocker = !!process.env.IS_DOCKER; const SSLPort = process.env.SSL_PORT || (isDocker ? 443 : 4001); const printSuccess = () => { console.log(`🔐 HTTPS server successfully started (port: ${SSLPort} ${isDocker ? 'of container' : ''})`); }; const printNotSoGood = (msg) => { console.log(`SSL Not Enabled: ${msg}`); }; /* Starts SSL-secured node server */ const startSSLServer = () => { const httpsServer = https.createServer({ key: fs.readFileSync(httpsCerts.private), cert: fs.readFileSync(httpsCerts.public), }, app); httpsServer.listen(SSLPort, () => { printSuccess(); }); }; /* Check if SSL certs present, if so also start the HTTPS server */ stat(httpsCerts.public).then(() => { stat(httpsCerts.private).then(() => { startSSLServer(); }).catch(() => { printNotSoGood('Private key not present'); }); }).catch(() => { printNotSoGood('Public key not present'); }); };