Removing callback dependencies, required for

DB migration
pull/4/head
AdamSBlack 2022-01-09 04:31:42 +00:00
parent fb5a91a010
commit 225047e24f
No known key found for this signature in database
GPG Key ID: E66E51A97D150E28
7 changed files with 32 additions and 76 deletions

View File

@ -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 --

View File

@ -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,
};

View File

@ -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.
},
};
};
});

View File

@ -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;

View File

@ -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'),

View File

@ -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,

View File

@ -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 })