const package = require("./package.json"); const exec = require('child_process').execSync; const fs = require("fs"); const path = require("path"); const express = require("express"); const app = express(); const http = require("http"); const https = require("https"); var production = process.env.PRODUCTION || false; var port = process.env.NESPORT || 80; var portSSL = process.env.NESPORTSSL || 443; var sslKeyPath = process.env.SSLKEYPATH || null; var sslCertPath = process.env.SSLCERTPATH || null; var sslCaPath = process.env.SSLCAPATH || null; function GenVersion(){ var v = package.version; // Testing for a GIT repo... if not in a production environment. if (production === false){ try{ var res = exec("git rev-parse --abbrev-ref HEAD").toString(); v += "-[" + res.trim(); res = exec("git rev-parse HEAD").toString(); v += ":" + res.substring(0, 5) + "]"; } catch(e) { if (v !== package.version){ v += "]"; // If v doesn't match package.version, then assume that the first git call worked. } } } return v; } var version = GenVersion(); app.set('views', path.join(__dirname, "/views")); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.use("/app", express.static(path.join(__dirname, "/app"))); app.get('/', function(req, res){ res.render('index.html', {version:version, author:package.author}); }); console.log("NESPaint (v" + version + ") Server"); if (sslKeyPath !== null && sslCertPath !== null){ try { var options = { key: fs.readFileSync(sslKeyPath), cert: fs.readFileSync(sslCertPath) } if (sslCaPath !== null) options.ca = fs.readFileSync(sslCaPath); app.use(function(req, res, next){ if (req.secure){ next(); } else { res.redirect('https://' + req.headers.host + req.url); } }); https.createServer(options, app).listen(portSSL, () => { console.log("HTTPS Listening on port " + portSSL + "!"); }); } catch (e) { console.log("WARNING: Failed to initialize HTTPS server. \"" + e.toString() + "\""); } } http.createServer(app).listen(port, () => { console.log("HTTP Listening on port " + port + "!"); });