remove unused imports, code tidy up
parent
414d2438db
commit
d9992dc2c0
|
@ -1,4 +1,4 @@
|
|||
var config = {
|
||||
const config = {
|
||||
applicationSalt: 'RANDOM_SEED',
|
||||
|
||||
databaseFile: 'database.sqlite',
|
||||
|
|
|
@ -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,10 +181,8 @@ 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('--');
|
||||
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];
|
||||
|
@ -200,15 +194,14 @@ async function getCrashlogs(dongle_id) {
|
|||
} catch (exception) {}
|
||||
if (!dateObj) dateObj = new Date(0);
|
||||
|
||||
crashlogFiles.push({
|
||||
name: crashlogDirectoryTree.children[i].name,
|
||||
size: crashlogDirectoryTree.children[i].size,
|
||||
return {
|
||||
name: file.name,
|
||||
size: file.size,
|
||||
date: dateObj,
|
||||
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/crash/${crashlogDirectoryTree.children[i].name}`,
|
||||
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/crash/${file.name}`,
|
||||
};
|
||||
});
|
||||
}
|
||||
crashlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
|
||||
}
|
||||
return crashlogFiles;
|
||||
}
|
||||
|
||||
|
@ -216,10 +209,8 @@ 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 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;
|
||||
|
@ -228,16 +219,14 @@ async function getBootlogs(dongle_id) {
|
|||
} catch (exception) {}
|
||||
if (!dateObj) dateObj = new Date(0);
|
||||
|
||||
bootlogFiles.push({
|
||||
name: bootlogDirectoryTree.children[i].name,
|
||||
size: bootlogDirectoryTree.children[i].size,
|
||||
return {
|
||||
name: file.name,
|
||||
size: file.size,
|
||||
date: dateObj,
|
||||
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/boot/${bootlogDirectoryTree.children[i].name}`,
|
||||
});
|
||||
}
|
||||
permalink: `${config.baseDriveDownloadUrl}${dongle_id}/${dongleIdHash}/boot/${file.name}`,
|
||||
};
|
||||
})
|
||||
bootlogFiles.sort((a, b) => ((a.date < b.date) ? 1 : -1));
|
||||
}
|
||||
|
||||
return bootlogFiles;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 });
|
||||
}));
|
||||
|
|
|
@ -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`);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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"`;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const WebSocket = require('ws');
|
||||
const fs = require('fs');
|
||||
const cookie = require('cookie');
|
||||
const jsonwebtoken = require('jsonwebtoken');
|
||||
const httpsServer = require('https');
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
11
worker.js
11
worker.js
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue