remove unused imports, code tidy up

pull/4/head
Cameron Clough 2022-01-08 22:00:08 +00:00
parent 414d2438db
commit d9992dc2c0
11 changed files with 86 additions and 131 deletions

View File

@ -1,4 +1,4 @@
var config = {
const config = {
applicationSalt: 'RANDOM_SEED',
databaseFile: 'database.sqlite',

View File

@ -1,6 +1,5 @@
const sanitize = require('sanitize')();
const { Op } = require('sequelize');
const { Logger } = require('log4js');
const crypto = require('crypto');
const dirTree = require('directory-tree');
const config = require('../config');
@ -37,11 +36,11 @@ async function pairDevice(account, qr_string) {
const device = deviceQuery.dataValues;
const decoded = await authenticationController.validateJWT(pairJWT, device.public_key);
if (decoded == null || decoded.pair == undefined) {
if (decoded == null || !decoded.pair) {
return { success: false, badToken: true };
}
if (device.account_id != 0) {
if (device.account_id !== 0) {
return { success: false, alreadyPaired: true, dongle_id: device.dongle_id };
}
return await pairDeviceToAccountId(device.dongle_id, account.id);
@ -97,8 +96,7 @@ async function setDeviceNickname(account, dongleId, nickname) {
}
async function getDevices(accountId) {
const devices = await models_orm.models.device.findAll({ where: { account_id: accountId } });
return devices;
return await models_orm.models.device.findAll({ where: { account_id: accountId } });
}
async function getDeviceFromDongle(dongleId) {
@ -118,9 +116,7 @@ async function setIgnoredUploads(dongleId, isIgnored) {
}
async function getAllDevicesFiltered() {
const devices = await models_orm.models.device.findAll();
return devices;
return await models_orm.models.device.findAll();
}
async function updateLastPing(device_id, dongle_id) {
@ -185,30 +181,27 @@ async function getCrashlogs(dongle_id) {
const dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(dongle_id).digest('hex');
const crashlogDirectoryTree = dirTree(`${config.storagePath}${dongle_id}/${dongleIdHash}/crash/`, { attributes: ['size'] });
var crashlogFiles = [];
if (crashlogDirectoryTree != undefined) {
for (let i = 0; i < crashlogDirectoryTree.children.length; i++) {
const timeSplit = crashlogDirectoryTree.children[i].name.replace('boot-', '').replace('crash-', '').replace('\.bz2', '').split('--');
let timeString = `${timeSplit[0]} ${timeSplit[1].replace(/-/g, ':')}`;
if (timeString.indexOf('_') > 0) {
timeString = timeString.split('_')[0];
}
let dateObj = null;
try {
dateObj = Date.parse(timeString);
} catch (exception) {}
if (!dateObj) dateObj = new Date(0);
crashlogFiles.push({
name: crashlogDirectoryTree.children[i].name,
size: crashlogDirectoryTree.children[i].size,
date: dateObj,
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/crash/${crashlogDirectoryTree.children[i].name}`,
});
const crashlogFiles = (crashlogDirectoryTree?.children || []).map((file) => {
const timeSplit = file.name.replace('boot-', '').replace('crash-', '').replace('\.bz2', '').split('--');
let timeString = `${timeSplit[0]} ${timeSplit[1].replace(/-/g, ':')}`;
if (timeString.indexOf('_') > 0) {
timeString = timeString.split('_')[0];
}
crashlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
}
let dateObj = null;
try {
dateObj = Date.parse(timeString);
} catch (exception) {}
if (!dateObj) dateObj = new Date(0);
return {
name: file.name,
size: file.size,
date: dateObj,
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/crash/${file.name}`,
};
});
crashlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
return crashlogFiles;
}
@ -216,28 +209,24 @@ async function getBootlogs(dongle_id) {
const dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(dongle_id).digest('hex');
const bootlogDirectoryTree = dirTree(`${config.storagePath}${dongle_id}/${dongleIdHash}/boot/`, { attributes: ['size'] });
var bootlogFiles = [];
if (bootlogDirectoryTree !== undefined) {
for (let i = 0; i < bootlogDirectoryTree.children.length; i++) {
const timeSplit = bootlogDirectoryTree.children[i].name.replace('boot-', '').replace('crash-', '').replace('\.bz2', '').split('--');
const timeString = `${timeSplit[0]} ${timeSplit[1].replace(/-/g, ':')}`;
const bootlogFiles = (bootlogDirectoryTree?.children || []).map((file) => {
const timeSplit = file.name.replace('boot-', '').replace('crash-', '').replace('\.bz2', '').split('--');
const timeString = `${timeSplit[0]} ${timeSplit[1].replace(/-/g, ':')}`;
let dateObj = null;
try {
dateObj = Date.parse(timeString);
} catch (exception) {}
if (!dateObj) dateObj = new Date(0);
bootlogFiles.push({
name: bootlogDirectoryTree.children[i].name,
size: bootlogDirectoryTree.children[i].size,
date: dateObj,
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/boot/${bootlogDirectoryTree.children[i].name}`,
});
}
bootlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
}
let dateObj = null;
try {
dateObj = Date.parse(timeString);
} catch (exception) {}
if (!dateObj) dateObj = new Date(0);
return {
name: file.name,
size: file.size,
date: dateObj,
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/boot/${file.name}`,
};
})
bootlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
return bootlogFiles;
}

View File

@ -19,7 +19,7 @@ function formatDuration(durationSeconds) {
// TODO remove this - looks like its used in old server.js
function simpleStringify(object) {
const simpleObject = {};
for (var prop in object) {
for (const prop in object) {
if (!object.hasOwnProperty(prop)) {
continue;
}

View File

@ -1,9 +1,4 @@
const router = require('express').Router();
const bodyParser = require('body-parser');
const crypto = require('crypto');
const { route } = require('../../server');
const config = require('../../config');
const deviceController = require('../../controllers/devices');
function runAsyncWrapper(callback) {
return function (req, res, next) {
@ -86,11 +81,8 @@ router.get('/admin/device/:dongle_id/ignore/:ignore_uploads', runAsyncWrapper(as
break;
default:
return res.json({ error: true, msg: 'MISSING DATA' });
break;
}
if (ignore === null) { return; }
await controllers.devices.setIgnoredUploads(req.params.dongle_id);
return res.status(200).json({ success: true });
}));

View File

@ -419,10 +419,10 @@ router.get('/v1.4/:dongleId/upload_url/', upload);
// DEVICE REGISTRATION OR RE-ACTIVATION
router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (req, res) => {
var imei1 = req.query.imei;
var { serial } = req.query;
var { public_key } = req.query;
var { register_token } = req.query;
const imei1 = req.query.imei;
const { serial } = req.query;
const { public_key } = req.query;
const { register_token } = req.query;
if (serial == null || serial.length < 5 || public_key == null || public_key.length < 5 || register_token == null || register_token.length < 5) {
logger.error(`HTTP.V2.PILOTAUTH a required parameter is missing or empty ${JSON.stringify(req.query)}`);
@ -430,7 +430,7 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
res.send('Malformed Request.');
return;
}
var decoded = await controllers.authentication.validateJWT(req.query.register_token, public_key);
const decoded = await controllers.authentication.validateJWT(req.query.register_token, public_key);
if (decoded == null || decoded.register == undefined) {
logger.error(`HTTP.V2.PILOTAUTH JWT token is invalid (${JSON.stringify(decoded)})`);
@ -443,7 +443,7 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
if (device == null) {
logger.info(`HTTP.V2.PILOTAUTH REGISTERING NEW DEVICE (${imei1}, ${serial})`);
while (true) {
var dongleId = crypto.randomBytes(4).toString('hex');
const dongleId = crypto.randomBytes(4).toString('hex');
const isDongleIdTaken = await models.__db.get('SELECT * FROM devices WHERE serial = ?', serial);
if (isDongleIdTaken == null) {
const resultingDevice = await models.__db.run(
@ -493,11 +493,11 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
// RETRIEVES DATASET FOR OUR MODIFIED CABANA - THIS RESPONSE IS USED TO FAKE A DEMO ROUTE
router.get('/useradmin/cabana_drive/:extendedRouteIdentifier', runAsyncWrapper(async (req, res) => {
var params = req.params.extendedRouteIdentifier.split('|');
var dongleId = params[0];
var dongleIdHashReq = params[1];
var driveIdentifier = params[2];
var driveIdentifierHashReq = params[3];
const params = req.params.extendedRouteIdentifier.split('|');
const dongleId = params[0];
const dongleIdHashReq = params[1];
const driveIdentifier = params[2];
const driveIdentifierHashReq = params[3];
const drive = await models.__db.get('SELECT * FROM drives WHERE identifier = ? AND dongle_id = ?', driveIdentifier, dongleId);
@ -507,9 +507,9 @@ router.get('/useradmin/cabana_drive/:extendedRouteIdentifier', runAsyncWrapper(a
return;
}
var dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.dongle_id).digest('hex');
var driveIdentifierHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.identifier).digest('hex');
var driveUrl = `${config.baseDriveDownloadUrl + drive.dongle_id}/${dongleIdHash}/${driveIdentifierHash}/${drive.identifier}`;
const dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.dongle_id).digest('hex');
const driveIdentifierHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.identifier).digest('hex');
const driveUrl = `${config.baseDriveDownloadUrl + drive.dongle_id}/${dongleIdHash}/${driveIdentifierHash}/${drive.identifier}`;
if (dongleIdHash != dongleIdHashReq || driveIdentifierHash != driveIdentifierHashReq) {
res.status(200);
@ -523,9 +523,9 @@ router.get('/useradmin/cabana_drive/:extendedRouteIdentifier', runAsyncWrapper(a
return;
}
var logUrls = [];
const logUrls = [];
for (var i = 0; i <= drive.max_segment; i++) {
for (let i = 0; i <= drive.max_segment; i++) {
logUrls.push(`${driveUrl}/${i}/rlog.bz2`);
}

View File

@ -1,7 +1,6 @@
const router = require('express').Router();
const bodyParser = require('body-parser');
const crypto = require('crypto');
var cookieParser = require('cookie-parser');
const cookieParser = require('cookie-parser');
const config = require('../config');
// TODO Remove this, pending on removing all auth logic from routes
@ -443,7 +442,7 @@ router.get('/useradmin/drive/:dongleId/:driveIdentifier', runAsyncWrapper(async
var directorySegments = {};
for (var i in directoryTree.children) {
// skip any non-directory entries (for example m3u8 file in the drive directory)
if (directoryTree.children[i].type != 'directory') continue;
if (directoryTree.children[i].type !== 'directory') continue;
var segment = directoryTree.children[i].name;

View File

@ -4,8 +4,7 @@ const bodyParser = require('body-parser');
const crypto = require('crypto');
const htmlspecialchars = require('htmlspecialchars');
const dirTree = require('directory-tree');
const cookie = require('cookie');
var cookieParser = require('cookie-parser');
const cookieParser = require('cookie-parser');
const config = require('../config');
// TODO Remove this, pending on removing all auth logic from routes
@ -30,8 +29,7 @@ router.post('/useradmin/auth', bodyParser.urlencoded({ extended: true }), runAsy
if (signIn.success) {
res.cookie('jwt', signIn.jwt);
res.redirect('/useradmin/overview');
}
else {
} else {
res.redirect(`/useradmin?status=${encodeURIComponent('Invalid credentials or banned account')}`);
}
}));
@ -106,24 +104,21 @@ router.post('/useradmin/register/token', bodyParser.urlencoded({ extended: true
infoText = 'Please check your inbox (<b>SPAM</b>) for an email with the registration token.<br>If the token was not delivered, please ask the administrator to check the <i>server.log</i> for the token generated for your email.<br><br>';
const emailStatus = await controllers.mailing.sendEmailVerification(token, email);
}
else { // final registration form filled
if (req.body.token != token) {
} else { // final registration form filled
if (req.body.token !== token) {
infoText = 'The registration token you entered was incorrect, please try again.<br><br>';
}
else if (req.body.password != req.body.password2 || req.body.password.length < 3) {
infoText = 'The passwords you entered did not or were shorter than 3 characters, please try again.<br><br>';
}
else {
} else if (req.body.password !== req.body.password2 || req.body.password.length < 3) {
infoText = 'The passwords you entered did not match or were shorter than 3 characters, please try again.<br><br>';
} else {
const result = await models.__db.run(
'INSERT INTO accounts (email, password, created, banned) VALUES (?, ?, ?, ?)',
email,
crypto.createHash('sha256').update(req.body.password + config.applicationSalt).digest('hex'),
Date.now(),
false
false,
);
if (result.lastID != undefined) {
if (result.lastID) {
logger.info(`USERADMIN REGISTRATION - created new account #${result.lastID} with email ${email}`);
res.redirect(`/useradmin?status=${encodeURIComponent('Successfully registered')}`);
@ -226,7 +221,7 @@ router.get('/useradmin/unpair_device/:dongleId', runAsyncWrapper(async (req, res
}
res.redirect('/useradmin/overview');
})),
}))
router.post('/useradmin/pair_device', bodyParser.urlencoded({ extended: true }), runAsyncWrapper(async (req, res) => {
const account = await controllers.authentication.getAuthenticatedAccount(req, res);
@ -239,20 +234,15 @@ router.post('/useradmin/pair_device', bodyParser.urlencoded({ extended: true }),
if (pairDevice.success === true) {
res.redirect('/useradmin/overview');
}
else if (pairDevice.registered === true) {
} else if (pairDevice.registered === true) {
res.redirect(`/useradmin/overview?linkstatus=${encodeURIComponent('Device not registered on Server')}`);
}
else if (pairDevice.badToken === true) {
} else if (pairDevice.badToken === true) {
res.redirect(`/useradmin/overview?linkstatus=${encodeURIComponent('Device QR Token is invalid or has expired')}`);
}
else if (pairDevice.alreadyPaired) {
} else if (pairDevice.alreadyPaired) {
res.redirect(`/useradmin/overview?linkstatus=${encodeURIComponent('Device is already paired, unpair in that account first')}`);
}
else if (pairDevice.badQr) {
} else if (pairDevice.badQr) {
res.redirect(`/useradmin/overview?linkstatus=${encodeURIComponent('Bad QR')}`);
}
else {
} else {
res.redirect(`/useradmin/overview?linkstatus=${encodeURIComponent(`Unspecified Error ${JSON.stringify(pairDevice)}`)}`);
}
}));
@ -420,20 +410,19 @@ router.get('/useradmin/drive/:dongleId/:driveIdentifier/:action', runAsyncWrappe
return;
}
if (req.params.action == 'delete') {
if (req.params.action === 'delete') {
const result = await models.__db.run(
'UPDATE drives SET is_deleted = ? WHERE id = ?',
true,
drive.id
drive.id,
);
}
else if (req.params.action == 'preserve') {
} else if (req.params.action === 'preserve') {
const result = await models.__db.run(
'UPDATE drives SET is_preserved = ? WHERE id = ?',
true,
drive.id
drive.id,
);
}
@ -464,12 +453,12 @@ router.get('/useradmin/drive/:dongleId/:driveIdentifier', runAsyncWrapper(async
return;
}
var dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(device.dongle_id).digest('hex');
var driveIdentifierHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.identifier).digest('hex');
const dongleIdHash = crypto.createHmac('sha256', config.applicationSalt).update(device.dongle_id).digest('hex');
const driveIdentifierHash = crypto.createHmac('sha256', config.applicationSalt).update(drive.identifier).digest('hex');
var driveUrl = `${config.baseDriveDownloadUrl + device.dongle_id}/${dongleIdHash}/${driveIdentifierHash}/${drive.identifier}/`;
const driveUrl = `${config.baseDriveDownloadUrl + device.dongle_id}/${dongleIdHash}/${driveIdentifierHash}/${drive.identifier}/`;
var cabanaUrl = null;
let cabanaUrl = null;
if (drive.is_processed) {
cabanaUrl = `${config.cabanaUrl}?retropilotIdentifier=${device.dongle_id}|${dongleIdHash}|${drive.identifier}|${driveIdentifierHash}&retropilotHost=${encodeURIComponent(config.baseUrl)}&demo=1"`;
}

View File

@ -1,5 +1,5 @@
var request = require('supertest');
var server = require('../server');
const request = require('supertest');
const server = require('../server');
const config = require('../config');
// TODO better way to only run tests once server is up

View File

@ -1,5 +1,4 @@
const WebSocket = require('ws');
const fs = require('fs');
const cookie = require('cookie');
const jsonwebtoken = require('jsonwebtoken');
const httpsServer = require('https');

View File

@ -1,8 +1,5 @@
const WebSocket = require('ws');
const fs = require('fs');
const cookie = require('cookie');
const jsonwebtoken = require('jsonwebtoken');
const httpsServer = require('https');
const httpServer = require('http');
const log4js = require('log4js');
const config = require('../../config');
@ -17,6 +14,7 @@ const athenaRealtime = require('../athena/index');
const realtimeCommands = require('./commands');
// eslint-disable-next-line no-underscore-dangle
function __server() {
server = httpServer.createServer();

View File

@ -10,25 +10,14 @@ const { open } = require('sqlite');
const lockfile = require('proper-lockfile');
const http = require('http');
const https = require('https');
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const jwt = require('jsonwebtoken');
const htmlspecialchars = require('htmlspecialchars');
const dirTree = require('directory-tree');
const { resolve } = require('path');
const { execSync } = require('child_process');
const Reader = require('@commaai/log_reader');
var ffprobe = require('ffprobe'),
ffprobeStatic = require('ffprobe-static');
const { exception } = require('console');
var db = null;