diff --git a/src/middlewares/auth.middleware.ts b/src/middlewares/auth.middleware.ts index 09de932..4f8ee5e 100644 --- a/src/middlewares/auth.middleware.ts +++ b/src/middlewares/auth.middleware.ts @@ -15,23 +15,23 @@ const testUser = { created: new Date(), } +function renderLogin(req, res, jsonResponse) { + res.status('401') // Unauthorized + if (jsonResponse) { + res.json({ + result: 'nouser', + msg: 'You are not logged in', + }) + } else { + res.render('login', { + devel: process.env.NS_DEVEL, + }) + } +} + export default function (options: Options): any { const { userDB, jsonResponse, exceptions } = options - const renderLogin = (req, res) => { - res.status('401') // Unauthorized - if (jsonResponse) { - res.json({ - result: 'nouser', - msg: 'You are not logged in', - }) - } else { - res.render('login', { - devel: process.env.NS_DEVEL, - }) - } - } - return function (req, res, next) { const sessionID = req.cookies.sessionID const isException = exceptions.some((exc) => { @@ -66,7 +66,7 @@ export default function (options: Options): any { return } logger.DebugLog(`No session ID: ${req.url}`, 'auth', 1) - renderLogin(req, res) + renderLogin(req, res, jsonResponse) return } @@ -80,7 +80,7 @@ export default function (options: Options): any { return } logger.DebugLog(`No user:${req.url}`, 'auth', 1) - renderLogin(req, res) + renderLogin(req, res, jsonResponse) return } diff --git a/src/modules/api/api.ts b/src/modules/api/api.ts index 22ccb6c..08112e3 100644 --- a/src/modules/api/api.ts +++ b/src/modules/api/api.ts @@ -40,6 +40,8 @@ const moduleName = 'API' let userDB let url let publicdirs = [] +let httpServer +let httpsServer function GetApp(): ModuleType { const app = express() @@ -203,6 +205,8 @@ function setupSubModules( url: url, publicdirs: publicdirs, moduleSpecificData: moduleSpecificData, + httpServer: httpServer, + httpsServer: httpsServer, }) moduleDatas.push(loadedModData || {}) } catch (e) { @@ -219,7 +223,9 @@ export default { getApp: GetApp, setup: (data: SetupData): void => { userDB = data.userDB - url = data.url // eslint-disable-line + url = data.url publicdirs = data.publicdirs + httpServer = data.httpServer + httpsServer = data.httpsServer }, } diff --git a/src/server.ts b/src/server.ts index e04ae2a..e6d2e3f 100755 --- a/src/server.ts +++ b/src/server.ts @@ -75,6 +75,8 @@ export interface SetupData { publicdirs: Array userDB?: any nextdir?: string + httpServer: any + httpsServer: any } if (!utils.FileExists(usersDBPath)) { @@ -128,7 +130,44 @@ function exit(reason) { process.exit() } +// 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' + +let certsLoaded = false +let certs +if ( + startHTTPS && + utils.FileExists(privkeyFile) && + utils.FileExists(fullchainFile) && + utils.FileExists(chainFile) +) { + try { + const key = utils.ReadFile(privkeyFile) + const cert = utils.ReadFile(fullchainFile) + const ca = utils.ReadFile(chainFile) + certs = { + key: key, + cert: cert, + ca: ca, + } + certsLoaded = true + } catch (err) { + logger.Log('Error loading cert files!', logger.GetColor('redbg')) + console.error(err) + } +} + const app = express() +const httpServer = http.createServer(app) +let httpsServer +if (certsLoaded) { + httpsServer = https.createServer(certs, app) + logger.Log('Listening on port: ' + httpsport + ' (https)') +} else { + logger.Log('Https not avaible') +} if (!process.env.NS_DEVEL) { app.use(function (req, res, next) { @@ -193,6 +232,8 @@ Object.keys(modules).forEach(function (key) { userDB: userDB, publicdirs: module.publicdirs, nextdir: module.nextdir, + httpServer: httpServer, + httpsServer: httpsServer, }) } @@ -208,35 +249,6 @@ Object.keys(modules).forEach(function (key) { } }) -// 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' - -let certsLoaded = false -let certs -if ( - startHTTPS && - utils.FileExists(privkeyFile) && - utils.FileExists(fullchainFile) && - utils.FileExists(chainFile) -) { - try { - const key = utils.ReadFile(privkeyFile) - const cert = utils.ReadFile(fullchainFile) - const ca = utils.ReadFile(chainFile) - certs = { - key: key, - cert: cert, - ca: ca, - } - certsLoaded = true - } catch (err) { - logger.Log('Error loading cert files!', logger.GetColor('redbg')) - console.error(err) - } -} - setLogTimer() function setLogTimer() { const now = new Date() @@ -320,12 +332,7 @@ if (isRoot) { logger.Log('Running as root', logger.GetColor('red')) } -const httpServer = http.createServer(app) httpServer.listen(port) -if (certsLoaded) { - const httpsServer = https.createServer(certs, app) +if (httpsServer) { httpsServer.listen(httpsport) - logger.Log('Listening on port: ' + httpsport + ' (https)') -} else { - logger.Log('Https not avaible') } diff --git a/src/types/basicTypes.ts b/src/types/basicTypes.ts index 1472aee..fe75332 100644 --- a/src/types/basicTypes.ts +++ b/src/types/basicTypes.ts @@ -81,5 +81,7 @@ export interface SubmoduleData { publicdirs: Array userDB?: any nextdir?: string + httpServer: any moduleSpecificData?: any + httpsServer?: any } diff --git a/submodules/qmining-page b/submodules/qmining-page index dafcefd..c60ace4 160000 --- a/submodules/qmining-page +++ b/submodules/qmining-page @@ -1 +1 @@ -Subproject commit dafcefd4f459d14737a9922cc4ba0400fbc9040a +Subproject commit c60ace4f9b9b7a0f45963c226b809d0b8b6bab29