diff --git a/routes/vehicles.js b/routes/vehicles.js index a18a34a..35e3d07 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -143,6 +143,8 @@ router.post('/check', async (req, res) => { } await collection.replaceOne({ number }, vehicle, { upsert: true }); + await Utils.vehicleRemoveEventEmails(vehicle, req); + res.status(201).send({ success: true, data: vehicle }); } catch (ex) { res.send(makeError(ex.message)); @@ -187,10 +189,12 @@ router.get('/', async (req, res) => { .sort({ [sortBy]: isAscending ? 1 : -1 }) .limit(pageSize) .toArray(); + if (vehicles.length == pageSize) { response.pageToken = vehicles[vehicles.length - 1]._id; } - response.items = vehicles; + + response.items = await Utils.vehiclesRemoveEventEmails(vehicles, req); res.send({ success: true, data: response }); } catch (ex) { @@ -206,6 +210,7 @@ router.get('/report', async (req, res) => { let collection = req.db.collection('vehicles'); let vehicle = await collection.findOne({ number }); if (vehicle) { + await Utils.vehicleRemoveEventEmails(vehicle, req); res.send({ success: true, data: vehicle }); } else { res.send(makeError('Vehicle not found')); @@ -279,7 +284,8 @@ router.get( let collection = req.db.collection('vehicles'); let vehicles = await collection.find({ number: plateNumber }).toArray(); if (vehicles.length > 0) { - res.send({ success: true, data: vehicles[0] }); + let vehicle = await Utils.vehicleRemoveEventEmails(vehicles[0], req); + res.send({ success: true, data: vehicle }); } else { res.send(makeError('Vehicle not found')); } @@ -303,6 +309,7 @@ router.post('/checkOsago', async (req, res) => { }); let vehicle = await collection.findOne(filter); if (vehicle) { + await Utils.vehicleRemoveEventEmails(vehicle, req); res.send({ success: true, data: vehicle }); } else { res @@ -371,6 +378,7 @@ router.post('/checkGbTg', async (req, res) => { await collection.updateOne({ number }, { $set: updatedFields }); vehicle = await collection.findOne({ number }); + await Utils.vehicleRemoveEventEmails(vehicle, req); res.send({ success: true, data: Object.assign(vehicle, updatedFields), diff --git a/utils/utils.js b/utils/utils.js index ce4f73f..e8db998 100644 --- a/utils/utils.js +++ b/utils/utils.js @@ -146,6 +146,44 @@ class Utils { static removeNullFields(obj) { return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null)); } + + static async vehiclesRemoveEventEmails(vehicles, req) { + + let user = await req.db.collection('users') + .findOne({ email: req.user.email }); + + if (user.permissions.includes('locationAuthor')) { + return vehicles; + } + + for (let vehicle of vehicles) { + for (let event of vehicle.events) { + if (event.addedBy != user.email) { + event.addedBy = null; + } + } + } + + return vehicles; + } + + static async vehicleRemoveEventEmails(vehicle, req) { + + let user = await req.db.collection('users') + .findOne({ email: req.user.email }); + + if (user.permissions.includes('locationAuthor')) { + return vehicle; + } + + for (let event of vehicle.events) { + if (event.addedBy != user.email) { + event.addedBy = null; + } + } + + return vehicle; + } } export default Utils;