mgmt-iot-web
Version:
web platform to configure and interact with iot devices using mqtt
111 lines (87 loc) • 2.84 kB
JavaScript
var path = require('path');
var express = require('express');
var Model = require('../controllers/models');
var Firmware = require('../controllers/firmwares');
var Sensor = require('../controllers/sensors');
// send file
var filePath = "";
if( process.env?.NODE_ENV?.toLowerCase().includes("docker") ){
filePath = "/mgmt-iot/devices/firmwares";
}else{
filePath = path.join(__dirname, "../public/firmwares");
}
// set up multer
const multer = require('multer')
const storage = multer.diskStorage({
destination: (req, file, cb) => {
console.log("storage:",filePath);
cb(null, filePath);
},
filename: (req, file, cb) => {
console.log(file);
cb(null, file.originalname);
}
});
const upload = multer({
storage: storage,
limits: {
fieldSize: 4 * 1024 * 1024, // 4MB, adjust as needed
},
});
const router = express.Router();
router.use('/:model_id',Model.checkAccess,(req,res,next)=>{next()});
router.use((req,res,next) => {
//log.debug("firmware route");
//console.log("current dir",__dirname);
next();
});
router.route('/:model_id')
.get(Model.get)
.delete(Model.delete)
.put(Model.update)
router.route('/:model_id/permissions')
.get(Model.listPermissions)
.post(Model.grantPermission)
.delete(Model.removePermission)
router.route('/:model_id/firmwares')
.get(Firmware.listByModel)
.post(async (req, res, next) => {
const filename = req.file ? req.file.originalname : null;
// Before calling uploadSingle, check if the filename exists
if (filename) {
const filePathToCheck = path.join(filePath, filename);
const exists = await fileExists(filePathToCheck);
if (exists) {
return res.status(400).json({ success: false, message: 'File with the same name already exists.' });
}
}
const uploadSingle = upload.single('file');
uploadSingle(req, res, (err) => {
if (err instanceof multer.MulterError) {
// Multer-specific errors (e.g., file too large)
return res.status(400).json({ success: false, message: err.message });
} else if (err) {
// Other errors
return res.status(500).json({ success: false, message: 'An unknown error occurred.' });
}
// Check if file was uploaded
if (!req.file) {
return res.status(400).json({ success: false, message: 'No file uploaded.' });
}
next();
});
},(req,res,next)=>{Firmware.add(req,res,next)})
router.route('/:model_id/firmware')
.get(Firmware.get)
.delete(Firmware.delete)
.put(Firmware.updateRelease)
router.route('/:model_id/sensors')
.get(Sensor.list)
router.route('/:model_id/sensor')
//.get(Sensor.get)
//.delete(Sensor.delete)
.put(Sensor.update)
.post(Sensor.add)
router.route('/:model_id/option')
.put(Model.updateOption)
module.exports = router;