rdio-scanner/server/routes/trunk-recorder-alias-upload.js
Chrystian Huot 56d3fbe0c8 Version 3.0
2020-01-27 11:01:25 -05:00

60 lines
1.9 KiB
JavaScript

'use strict';
const multer = require('multer');
const upload = multer({ storage: multer.memoryStorage() });
const { systemReducer, validateApiKey } = require('../helpers/rdio-scanner');
module.exports = ({ pubsub, store }) => (req, res) => upload.fields([
{ name: 'csv', maxCount: 1 },
{ name: 'key', maxCount: 1 },
{ name: 'system', maxCount: 1 },
])(req, res, (err) => {
if (err instanceof multer.MulterError) {
res.send(`${err.message}: ${err.field}\n`);
} else if (err) {
res.send(`${err.message}\n`);
} else {
const key = req.body.key;
const system = parseInt(req.body.system, 10);
const aliases = [];
if (!validateApiKey(key, system)) {
return res.send(`Api key is invalid for system ${system}.\n`);
}
const csv = req.files.csv[0].buffer.toString()
.split(/\n/)
.filter((l) => l.length && !/^\s*#/.test(l));
for (const line of csv) {
const vals = line.split(',');
aliases.push({
name: vals[1],
uid: parseInt(vals[0], 10),
})
}
store.rdioScannerSystem.findOne({ where: { system } })
.then((rdioScannerSystem) => {
if (rdioScannerSystem) {
rdioScannerSystem.update({ aliases: JSON.stringify(aliases), system }).then(() => {
res.send(`System ${rdioScannerSystem.name} updated successfully.\n`);
store.rdioScannerSystem.findAll({ order: [['system', 'ASC']] }).then((systems) => {
pubsub.publish('rdioScannerSystems', { rdioScannerSystems: systemReducer(systems) });
})
});
} else {
res.send(`Cannot update aliases for system ${rdioScannerSystem.name}.\n`);
}
});
}
});