lts-stats-api/app/controllers/adminController.js
2023-01-22 00:02:30 +01:00

89 lines
2.3 KiB
JavaScript

const moment = require('moment');
const bcrypt = require('bcryptjs');
const crypto = require("crypto");
const { insertSessions, insertSessionTracks } = require("../db/mongo/mongoSessions");
const { createUserMongo, getUserMongo } = require('../db/mongo/mongoUsers');
const { getHistoricalSessions, getIvaoSessionTracks } = require("../requests/ivao/session");
const saltRounds = 10;
async function initSessionsData(opts) {
const { callsign, userId, from, clear = false } = opts;
let to = opts.to;
if (!to) {
to = moment().utc().subtract(1, 'day').endOf('day').format();
}
const data = await getHistoricalSessions({
callsign,
userId,
from,
to
});
await insertSessions(data, clear);
console.log(`${data.length} sessions inserted.`);
await initSessionsTracks(data.map(d => d.id), clear);
}
async function initSessionsTracks(sessions, clear) {
const array = [];
const batchSize = 50;
for (let index = 0; index < sessions.length; index++) {
const sessionId = sessions[index];
const tracks = await getIvaoSessionTracks(sessionId);
array.push({
sessionId,
tracks,
});
if (index < sessions.length - 1 && (index + 1) % batchSize === 0) {
await pause(5000);
}
}
await insertSessionTracks(array, clear);
console.log(`${array.length} tracks inserted.`)
}
async function pause(millis) {
await new Promise((resolve) => setTimeout(resolve, millis));
}
function getHashedPassword(password) {
const salt = bcrypt.genSaltSync(saltRounds);
return bcrypt.hashSync(password, salt);
}
async function createUser(request) {
try {
const { username, password, roles, firstname, lastname, vid } = request.body;
const hash = getHashedPassword(password);
const id = crypto.randomBytes(16).toString("hex");
return await createUserMongo({ id, username, hash, roles, firstname, lastname, vid });
} catch (err) {
console.log('err :>> ', err);
}
}
async function authenticate(username, password) {
try {
const user = await getUserMongo(username);
if (bcrypt.compareSync(password, user.hash)) {
delete user.hash;
return user;
}
return undefined;
} catch (err) {
console.log('err :>> ', err);
}
}
module.exports = {
initSessionsData,
createUser,
authenticate,
getHashedPassword,
}