added model for drive segments, pilotauth now uses ORM
parent
22bf9d74e0
commit
7a11f51cd8
|
@ -107,6 +107,21 @@ async function getDeviceFromDongle(dongleId) {
|
|||
}
|
||||
return devices.dataValues;
|
||||
}
|
||||
// TODO combine these redundant functions into one
|
||||
async function getDeviceFromSerial(serial) {
|
||||
if (!serial) return null;
|
||||
const devices = await orm.models.device.findOne({ where: { serial } });
|
||||
if (!devices || !devices.dataValues) {
|
||||
return null;
|
||||
}
|
||||
return devices.dataValues;
|
||||
}
|
||||
|
||||
async function updateDevice(dongleId, data) {
|
||||
if (!dongleId) return null;
|
||||
|
||||
return orm.models.device.update(data, { where: { dongle_id: dongleId } });
|
||||
}
|
||||
|
||||
async function setIgnoredUploads(dongleId, isIgnored) {
|
||||
await orm.models.accounts.update(
|
||||
|
@ -245,6 +260,63 @@ async function getBootlogs(dongleId) {
|
|||
return bootlogFiles;
|
||||
}
|
||||
|
||||
async function updateOrCreateDrive(dongleId, identifier, data) {
|
||||
const check = orm.models.drives.findOne({ where: { dongle_id: dongleId, identifier } });
|
||||
|
||||
if (check.dataValues) {
|
||||
return { error: true, msg: 'DRIVE_EXISTS', drive_already_exits: true };
|
||||
}
|
||||
|
||||
return orm.models.drives.create({
|
||||
...data,
|
||||
dongle_Id: dongleId,
|
||||
identifier,
|
||||
});
|
||||
}
|
||||
|
||||
async function updateOrCreateDriveSegment(dongleId, identifier, segmentId, data) {
|
||||
console.log(orm);
|
||||
const check = orm.models.drive_segments.findOne({
|
||||
where: { dongle_id: dongleId, drive_identifier: identifier },
|
||||
});
|
||||
|
||||
if (check.dataValues) {
|
||||
return { error: true, msg: 'DRIVE_EXISTS', drive_already_exits: true };
|
||||
}
|
||||
|
||||
return orm.models.drive_segments.create({
|
||||
...data,
|
||||
segment_id: segmentId,
|
||||
drive_identifier: identifier,
|
||||
dongle_id: dongleId,
|
||||
});
|
||||
}
|
||||
|
||||
async function getDriveSegment(dongleId, driveName, segment) {
|
||||
return orm.models.drive_segments.findOne({
|
||||
|
||||
where: {
|
||||
segment_id: segment,
|
||||
drive_identifier: driveName,
|
||||
dongle_id: dongleId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function createDongle(dongleId, accountId, imei, serial, publicKey) {
|
||||
return orm.models.device.create({
|
||||
dongle_id: dongleId,
|
||||
account_id: 0,
|
||||
imei,
|
||||
serial,
|
||||
device_type: 'freon',
|
||||
public_key: publicKey,
|
||||
created: Date.now(),
|
||||
last_ping: Date.now(),
|
||||
storage_used: 0,
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
pairDevice,
|
||||
unpairDevice,
|
||||
|
@ -257,10 +329,15 @@ module.exports = {
|
|||
updateLastPing,
|
||||
isUserAuthorised,
|
||||
getOwnersFromDongle,
|
||||
createDongle,
|
||||
getDeviceFromSerial,
|
||||
updateDevice,
|
||||
|
||||
// drive stuff, move maybe?
|
||||
getDrives,
|
||||
getBootlogs,
|
||||
getCrashlogs,
|
||||
getDriveFromidentifier,
|
||||
updateOrCreateDrive,
|
||||
updateOrCreateDriveSegment,
|
||||
};
|
||||
|
|
|
@ -17,6 +17,7 @@ const modelDefiners = [
|
|||
require('./athena_action_log.model'),
|
||||
require('./athena_returned_data.model'),
|
||||
require('./device_authorised_users.model'),
|
||||
require('./drive_segments.model'),
|
||||
];
|
||||
|
||||
for (const modelDefiner of modelDefiners) {
|
||||
|
|
116
routes/api.js
116
routes/api.js
|
@ -28,6 +28,7 @@ async function dbConnect() {
|
|||
dbConnect();
|
||||
|
||||
|
||||
|
||||
// DRIVE & BOOT/CRASH LOG FILE UPLOAD HANDLING
|
||||
router.put('/backend/post_upload', bodyParser.raw({
|
||||
inflate: true,
|
||||
|
@ -284,51 +285,40 @@ async function upload(req, res) {
|
|||
const timeSplit = driveName.split('--');
|
||||
const timeString = `${timeSplit[0]} ${timeSplit[1].replace(/-/g, ':')}`;
|
||||
|
||||
const driveResult = await models.run(
|
||||
'INSERT INTO drives (identifier, dongle_id, max_segment, duration, distance_meters, filesize, upload_complete, is_processed, drive_date, created, last_upload, is_preserved, is_deleted, is_physically_removed) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
driveName,
|
||||
dongleId,
|
||||
segment,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
Date.parse(timeString),
|
||||
Date.now(),
|
||||
Date.now(),
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
).catch((err) => {logger.warn("303", err)})
|
||||
const driveResult = await deviceController.updateOrCreateDrive(dongleId, identifier, {
|
||||
max_segment: segment,
|
||||
duration: 0,
|
||||
distance_meters: 0,
|
||||
filesize: 0,
|
||||
upload_complete: false,
|
||||
is_processed: false,
|
||||
drive_date: Date.parse(timeString),
|
||||
created: Date.now(),
|
||||
last_upload: Date.now(),
|
||||
is_preserved: false,
|
||||
is_deleted: false,
|
||||
is_physically_removed: false,
|
||||
})
|
||||
|
||||
await models.run(
|
||||
'INSERT INTO drive_segments (segment_id, drive_identifier, dongle_id, duration, distance_meters, upload_complete, is_processed, is_stalled, created) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
segment,
|
||||
driveName,
|
||||
dongleId,
|
||||
0,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
Date.now(),
|
||||
).catch((err) => {logger.warn("316", err)})
|
||||
await deviceController.updateOrCreateDriveSegment(dongleId, driveName, segment, {
|
||||
duration: 0,
|
||||
distance_meters: 0,
|
||||
upload_complete: false,
|
||||
is_processed: false,
|
||||
is_stalled: false,
|
||||
created: Date.now(),
|
||||
})
|
||||
|
||||
logger.info(`HTTP.UPLOAD_URL created new drive #${JSON.stringify(driveResult.lastID)}`);
|
||||
} else {
|
||||
await models.run(
|
||||
'UPDATE drives SET last_upload = ?, max_segment = ?, upload_complete = ?, is_processed = ? WHERE identifier = ? AND dongle_id = ?',
|
||||
Date.now(),
|
||||
Math.max(drive.max_segment, segment),
|
||||
false,
|
||||
false,
|
||||
driveName,
|
||||
dongleId,
|
||||
).catch((err) => {logger.warn("328", err)})
|
||||
|
||||
const driveSegment = await models.get('SELECT * FROM drive_segments WHERE drive_identifier = ? AND dongle_id = ? AND segment_id = ?', driveName, dongleId, segment);
|
||||
await deviceController.updateOrCreateDrive(dongleId, driveName, {
|
||||
max_segment: Math.max(drive.max_segment, segment),
|
||||
upload_complete: false,
|
||||
is_processed: false,
|
||||
last_upload: Date.now(),
|
||||
})
|
||||
|
||||
const driveSegment = await driveController.getDriveSegment(dongleId, driveName, segment);
|
||||
if (driveSegment == null) {
|
||||
await models.run(
|
||||
'INSERT INTO drive_segments (segment_id, drive_identifier, dongle_id, duration, distance_meters, upload_complete, is_processed, is_stalled, created) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
|
@ -342,15 +332,20 @@ async function upload(req, res) {
|
|||
false,
|
||||
Date.now(),
|
||||
).catch((err) => {logger.warn("344", err)})
|
||||
|
||||
await deviceController.updateOrCreateDriveSegment(dongleId, driveName, segment, {
|
||||
duration: 0,
|
||||
distance_meters: 0,
|
||||
upload_complete: false,
|
||||
is_processed: false,
|
||||
is_stalled: false,
|
||||
created: Date.now()
|
||||
})
|
||||
} else {
|
||||
await models.run(
|
||||
'UPDATE drive_segments SET upload_complete = ?, is_stalled = ? WHERE drive_identifier = ? AND dongle_id = ? AND segment_id = ?',
|
||||
false,
|
||||
false,
|
||||
driveName,
|
||||
dongleId,
|
||||
segment,
|
||||
).catch((err) => {logger.warn("353", err)})
|
||||
await deviceController.updateOrCreateDriveSegment(dongleId, driveName, segment, {
|
||||
is_processed: false,
|
||||
is_stalled: false,
|
||||
})
|
||||
}
|
||||
|
||||
logger.info(`HTTP.UPLOAD_URL updated existing drive: ${JSON.stringify(drive)}`);
|
||||
|
@ -391,7 +386,7 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
|
|||
return res.status(400).send('Malformed Request.');
|
||||
}
|
||||
|
||||
const device = await models.get('SELECT * FROM devices WHERE serial = ?', serial);
|
||||
const device = await deviceController.getDeviceFromSerial(serial)
|
||||
if (device == null) {
|
||||
logger.info(`HTTP.V2.PILOTAUTH REGISTERING NEW DEVICE (${imei1}, ${serial})`);
|
||||
|
||||
|
@ -401,20 +396,10 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
|
|||
const dongleId = crypto.randomBytes(4).toString('hex');
|
||||
const isDongleIdTaken = await models.get('SELECT * FROM devices WHERE serial = ?', serial);
|
||||
if (isDongleIdTaken == null) {
|
||||
await models.run(
|
||||
'INSERT INTO devices (dongle_id, account_id, imei, serial, device_type, public_key, created, last_ping, storage_used) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
dongleId,
|
||||
0,
|
||||
imei1,
|
||||
serial,
|
||||
'freon',
|
||||
publicKey,
|
||||
Date.now(),
|
||||
Date.now(),
|
||||
0,
|
||||
);
|
||||
await deviceController.createDongle(dongleId, 0, imei1, serial, publicKey)
|
||||
|
||||
const newDevice = await models.get('SELECT * FROM devices WHERE dongle_id = ?', dongleId);
|
||||
|
||||
const newDevice = await deviceController.getDeviceFromDongle(dongleId);
|
||||
|
||||
logger.info(`HTTP.V2.PILOTAUTH REGISTERED NEW DEVICE: ${JSON.stringify(newDevice)}`);
|
||||
return res.status(200).json({ dongle_id: newDevice.dongle_id, access_token: 'DEPRECATED-BUT-REQUIRED-FOR-07' });
|
||||
|
@ -422,12 +407,7 @@ router.post('/v2/pilotauth/', bodyParser.urlencoded({ extended: true }), async (
|
|||
}
|
||||
}
|
||||
|
||||
await models.run(
|
||||
'UPDATE devices SET last_ping = ?, public_key = ? WHERE dongle_id = ?',
|
||||
Date.now(),
|
||||
publicKey,
|
||||
device.dongle_id,
|
||||
);
|
||||
await deviceController.updateDevice(device.dongle_id, {last_ping: Date.now(), public_key: publicKey})
|
||||
|
||||
logger.info(`HTTP.V2.PILOTAUTH REACTIVATING KNOWN DEVICE (${imei1}, ${serial}) with dongle_id ${device.dongle_id}`);
|
||||
return res.status(200).json({ dongle_id: device.dongle_id, access_token: 'DEPRECATED-BUT-REQUIRED-FOR-07' });
|
||||
|
|
Loading…
Reference in New Issue