From 225047e24fffb5eacf4f55fabdd8337751397e0d Mon Sep 17 00:00:00 2001 From: AdamSBlack <18472768+AdamSBlack@users.noreply.github.com> Date: Sun, 9 Jan 2022 04:31:42 +0000 Subject: [PATCH] Removing callback dependencies, required for DB migration --- .eslintrc.json | 2 +- controllers/storage.js | 27 ++++++++++----------------- models/index.js | 31 +++---------------------------- routes/administration/adminApi.js | 16 +++------------- routes/index.js | 4 ++-- routes/userAdminApi.js | 9 +++++---- server.js | 19 ++++++++----------- 7 files changed, 32 insertions(+), 76 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 83dde24..e9b1977 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,7 +5,7 @@ "env": { "es6": true, "node": true, - "browser": false // do we need this? + "browser": false // do we need this? none of this code will ever run on a browswer }, "rules": { // disallow use of unary operators, ++ and -- diff --git a/controllers/storage.js b/controllers/storage.js index 14b0950..84e7a5a 100644 --- a/controllers/storage.js +++ b/controllers/storage.js @@ -1,11 +1,10 @@ const path = require('path'); const fs = require('fs'); const { execSync } = require('child_process'); +const log4js = require('log4js'); const config = require('../config'); -// eslint-disable-next-line no-unused-vars -let models; -let logger; +const logger = log4js.getLogger('default'); let totalStorageUsed; @@ -120,19 +119,13 @@ async function getTotalStorageUsed() { return totalStorageUsed; } -module.exports = (_models, _logger) => { - models = _models; - logger = _logger; +setInterval(updateTotalStorageUsed, 120000); - // Update the used storage every 120 seconds - setInterval(updateTotalStorageUsed, 120000); - - return { - initializeStorage, - mkDirByPathSync, - writeFileSync, - moveUploadedFile, - updateTotalStorageUsed, - getTotalStorageUsed, - }; +module.exports = { + initializeStorage, + mkDirByPathSync, + writeFileSync, + moveUploadedFile, + updateTotalStorageUsed, + getTotalStorageUsed, }; diff --git a/models/index.js b/models/index.js index 35c6409..2d631e1 100644 --- a/models/index.js +++ b/models/index.js @@ -20,32 +20,7 @@ async function validateDatabase(db, logger) { } } -module.exports = async (logger) => { - let db; +module.exports = async () => ({ + models: {}, - try { - db = await open({ - filename: config.databaseFile, - driver: sqlite3.Database, - mode: sqlite3.OPEN_READWRITE, - }); - } catch (exception) { - logger.error(exception); - process.exit(); - } - - // I'm not sure we _really_ need to wait for this, since it'll exit the application if it's - // invalid anyway. - - await validateDatabase(db, logger); - - return { - models: { - drivesModel: require('./drives')(db), - users: require('./users')(db), - - // TODO remove access to DB queries from non models - __db: db, // to be removed when db queries are removed from outside models. - }, - }; -}; +}); diff --git a/routes/administration/adminApi.js b/routes/administration/adminApi.js index 6ff06e2..e29d572 100644 --- a/routes/administration/adminApi.js +++ b/routes/administration/adminApi.js @@ -1,4 +1,5 @@ const router = require('express').Router(); +const controllers = require('../../controllers'); function runAsyncWrapper(callback) { return function wrapper(req, res, next) { @@ -7,12 +8,6 @@ function runAsyncWrapper(callback) { }; } -/* eslint-disable no-unused-vars */ -let models; -let controllers; -let logger; -/* eslint-enable no-unused-vars */ - // probs should put middleware somewhere else router.use(async (req, res, next) => { const currentAdmin = await controllers.admin.isCurrentUserAdmin(true, req); @@ -85,6 +80,7 @@ router.get('/device/:dongle_id/ignore/:ignore_uploads', runAsyncWrapper(async (r return req.status(400).json({ error: true, msg: 'MISSING DATA', status: 400 }); } + // TODO make this cleaner let isIgnored = null; switch (ignoreUploads) { case 'true': @@ -107,10 +103,4 @@ router.get('/device/:dongle_id/athena/reboot', runAsyncWrapper(async (req, res) res.send('ok'); })); -module.exports = (_models, _controllers, _logger) => { - models = _models; - controllers = _controllers; - logger = _logger; - - return router; -}; +module.exports = router; diff --git a/routes/index.js b/routes/index.js index cccc0a6..b30b7b5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -2,8 +2,8 @@ module.exports = (_models, _controllers, _logger) => ({ useradmin: require('./useradmin')(_models, _controllers, _logger), api: require('./api')(_models, _controllers, _logger), - useradminapi: require('./userAdminApi')(_models, _controllers, _logger), - admin: require('./administration/adminApi')(_models, _controllers, _logger), + useradminapi: require('./userAdminApi'), + admin: require('./administration/adminApi'), realtime: require('./api/realtime'), deviceApi: require('./api/devices'), diff --git a/routes/userAdminApi.js b/routes/userAdminApi.js index c0973fa..a79b61d 100644 --- a/routes/userAdminApi.js +++ b/routes/userAdminApi.js @@ -3,6 +3,7 @@ const router = require('express').Router(); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const config = require('../config'); +const controllers = require('../controllers'); // TODO Remove this, pending on removing all auth logic from routes router.use(cookieParser()); @@ -16,7 +17,6 @@ function runAsyncWrapper(callback) { /* eslint-disable no-unused-vars */ let models; -let controllers; let logger; /* eslint-enable no-unused-vars */ @@ -35,9 +35,10 @@ router.get('/retropilot/0/useradmin/signout', runAsyncWrapper(async (req, res) = })); router.get('/retropilot/0/useradmin', runAsyncWrapper(async (req, res) => { - const accounts = await models.__db.get('SELECT COUNT(*) AS num FROM accounts'); - const devices = await models.__db.get('SELECT COUNT(*) AS num FROM devices'); - const drives = await models.__db.get('SELECT COUNT(*) AS num FROM drives'); + // TODO pull these values from db + const accounts = 0; + const devices = 0; + const drives = 0; return res.status(200).send({ success: true, diff --git a/server.js b/server.js index fcfe396..46248df 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,8 @@ const https = require('https'); const express = require('express'); const cors = require('cors'); const rateLimit = require('express-rate-limit'); +const cookieParser = require('cookie-parser'); +const storageController = require('./controllers/storage'); log4js.configure({ appenders: { logfile: { type: 'file', filename: 'server.log' }, out: { type: 'console' } /* {type: "file", filename: "server1.log"} */ }, @@ -18,13 +20,11 @@ const logger = log4js.getLogger('default'); global.__basedir = __dirname; /* eslint-disable no-unused-vars */ -const cookieParser = require('cookie-parser'); const webWebsocket = require('./websocket/web'); const athena = require('./websocket/athena'); -let routers = require('./routes'); +const routers = require('./routes'); const orm = require('./models/index.model'); -let controllers = require('./controllers'); -let models = require('./models/index'); +const controllers = require('./controllers'); const router = require('./routes/api/realtime'); /* eslint-enable no-unused-vars */ @@ -40,8 +40,6 @@ function runAsyncWrapper(callback) { const web = async () => { const app = express(); - models = await models(logger).models; - app.use((req, res, next) => { // TODO: can we use config.baseUrl here? res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); @@ -50,12 +48,9 @@ const web = async () => { next(); }); - controllers = await controllers(models, logger); + storageController.initializeStorage(); + await storageController.updateTotalStorageUsed(); - controllers.storage.initializeStorage(); - await controllers.storage.updateTotalStorageUsed(); - - routers = routers(models, controllers, logger); app.use(routers.api); app.use(routers.useradmin); app.use(routers.authenticationApi); @@ -107,6 +102,8 @@ const web = async () => { res.status(404); res.send('Not Implemented'); })); + + return app; }; lockfile.lock('retropilot_server', { realpath: false, stale: 30000, update: 2000 })