mgmt-iot-web
Version:
web platform to configure and interact with iot devices using mqtt
177 lines (146 loc) • 5.17 kB
JavaScript
var Model = require('../models/models');
var Client = require('../models/clients');
var Joi = require('joi');
var httpStatus = require('http-status-codes');
var response = require('./response');
module.exports = {
get : (req,res,next)=>{
Model.getModelById(req.params.model_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
},
add : (req, res, next)=>{
const val = Joi.object({
name: Joi.string().required(),
project_id: Joi.number().required(),
description: Joi.string().optional()
}).validate(req.body);
if(req.user.level != 5){
return response.error(res,httpStatus.BAD_REQUEST,"You have no permission to add a new model");
}
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.getId(req.body.name)
.then(existingId => {
if(existingId) {
response.error(res,httpStatus.BAD_REQUEST,"Model with this name already exists");
} else {
Model.add(req.body.name, req.body.project_id, req.body.description,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
})
.catch(err => {
response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
delete : (req, res, next)=>{
const val = Joi.object({
model_id: Joi.number().required()
}).validate(req.params);
if(user.level != 5){
return response.error(res,httpStatus.BAD_REQUEST,"You have no permission to delete the model");
}
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.delete(req.params.model_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
update : (req, res, next)=>{
const val = Joi.object({
id: Joi.number().required(),
description: Joi.string().required().allow(""),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.update(req.body.id,req.body.description,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
updateOption : (req, res, next)=>{
const val = Joi.object({
option: Joi.string().required(),
enable: Joi.boolean().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.updateOption(req.params.model_id,req.body.option,req.body.enable,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
list : (req, res, next)=>{
Model.list((err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
},
listPermissions : (req, res, next)=>{
Model.listPermissions(req.params.model_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
},
grantPermission : (req, res, next)=>{
const val = Joi.object({
clientId: Joi.string().required(),
level: Joi.string().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.grantPermission(req.body.clientId,req.body.level,req.params.model_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
removePermission : (req, res, next)=>{
const val = Joi.object({
id: Joi.number().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Model.removePermission(req.body.id,req.params.model_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
checkOwnership : (req, res, next)=>{
if(Client.isAdmin(req.user.level))
return next();
else{
Model.checkOwnership(req.user.client_id,req.params.model_id,(err,access)=>{
if(err) res.json({"Error" : true, "Message" : err, "Result" : null});
else if(!access) res.json({"Error" : true, "Message" : "Not allowed", "Result" : null});
else next();
});
}
},
checkAccess : (req, res, next)=>{
if(Client.isAdmin(req.user.level))
return next();
else{
Model.checkAccess(req.user.client_id,req.params.model_id,(err,access)=>{
if(err) res.json({"Error" : true, "Message" : err, "Result" : null});
else if(!access) res.json({"Error" : true, "Message" : "Not allowed", "Result" : null});
else next();
});
}
},
};