/* ---------------------------------------------------------------------------- Question Server GitLab: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ------------------------------------------------------------------------- */ const startHTTPS = true const port = 8080 const httpsport = 8443 const express = require('express') const vhost = require('vhost') const logger = require('./utils/logger.js') const utils = require('./utils/utils.js') const fs = require('fs') const http = require('http') const https = require('https') const stat = require('./utils/stat.js') stat.Load() const loggableKeywords = [ 'user.js' ] let modules = { qmining: { path: './modules/qmining.js', name: 'qmining', urls: [ 'qmining.frylabs.net', 'localhost' ] }, main: { path: './modules/main.js', name: 'main', urls: [ 'frylabs.net', 'www.frylabs.net' ] }, sio: { path: './modules/sio.js', name: 'sio', urls: [ 'sio.frylabs.net' ] }, stuff: { path: './modules/stuff.js', name: 'stuff', urls: [ 'stuff.frylabs.net' ] }, old: { path: './modules/old.js', name: 'old', urls: [ 'qmining.tk', 'www.qmining.tk' ] } } const app = express() app.use(function (req, res, next) { res.on('finish', function () { logger.LogReq(req, true, res.statusCode) let toLog = loggableKeywords.some((x) => { return req.url.includes(x) }) if (toLog) { logger.LogReq(req) } if (res.statusCode !== 404) { stat.LogStat(req.url) } }) next() }) Object.keys(modules).forEach(function (k, i) { let x = modules[k] try { x.app = require(x.path).app x.urls.forEach((url) => { app.use(vhost(url, x.app)) }) } catch (e) { console.log(e) } }) const locLogFile = './stats/logs' const allLogFile = '/nlogs/log' // https://certbot.eff.org/ const privkeyFile = '/etc/letsencrypt/live/frylabs.net/privkey.pem' const fullchainFile = '/etc/letsencrypt/live/frylabs.net/fullchain.pem' const chainFile = '/etc/letsencrypt/live/frylabs.net/chain.pem' var certsLoaded = false if (startHTTPS && utils.FileExists(privkeyFile) && utils.FileExists(fullchainFile) && utils.FileExists( chainFile)) { try { const key = fs.readFileSync(privkeyFile, 'utf8') const cert = fs.readFileSync(fullchainFile, 'utf8') const ca = fs.readFileSync(chainFile, 'utf8') var certs = { key: key, cert: cert, ca: ca } certsLoaded = true } catch (e) { logger.Log('Error loading cert files!', logger.GetColor('redbg')) console.log(e) } } function setLogTimer () { const d = new Date() const h = new Date( d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, 0 ) const e = h - d if (e > 100) { setTimeout(setLogTimer, e) } else { logger.Log('Log timer malfunction :/') } const line = '-------------------------------------------------------------------------------' logger.Log(line) utils.AppendToFile(line, locLogFile) utils.AppendToFile(line, allLogFile) } setLogTimer() logger.Log('Node version: ' + process.version) logger.Log('Listening on port: ' + port) const httpServer = http.createServer(app) httpServer.listen(port) if (certsLoaded) { const httpsServer = https.createServer(certs, app) httpsServer.listen(httpsport) logger.Log('Listening on port: ' + httpsport + ' (https)') } else { logger.Log('Https not avaible') } // app.listen(port)