mgmt-iot-web
Version:
web platform to configure and interact with iot devices using mqtt
195 lines (163 loc) • 5.89 kB
JavaScript
var Project = require('../models/projects');
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)=>{
Project.getById(req.params.project_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(),
description: Joi.string().allow('').optional(),
uid_prefix: Joi.string().required(),
uid_length: Joi.number().integer().min(1).required(),
}).validate(req.body);
if(req.user.level != 5){
return response.error(res,httpStatus.BAD_REQUEST,"You have no permission to add a new project");
}
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
// Check if project already exists
Project.getId(req.body.name)
.then(existingId => {
if(existingId) {
response.error(res,httpStatus.BAD_REQUEST,"Project with this name already exists");
} else {
Project.add(req.body.name, req.body.description, req.body.uid_prefix, req.body.uid_length, (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({
id: Joi.number().required()
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
if(req.user.level == 5){
Project.delete(req.body.id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}else{
response.error(res,httpStatus.BAD_REQUEST,'You have no permissions for destructive action')
}
}
},
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{
Project.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{
Project.updateOption(req.params.project_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)=>{
Project.list((err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
},
listPermissions : (req, res, next)=>{
Project.listPermissions(req.params.project_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.number().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Project.grantPermission(req.body.clientId,req.body.level,req.params.project_id,(err,rows)=>{
if(!err) response.send(res,rows);
else response.error(res,httpStatus.INTERNAL_SERVER_ERROR,err);
});
}
},
updatePermission : (req, res, next)=>{
const val = Joi.object({
clientId: Joi.string().required(),
level: Joi.number().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Project.grantPermission(req.body.clientId,req.body.level,req.params.project_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({
clientId: Joi.number().required(),
}).validate(req.body);
if(val.error){
response.error(res,httpStatus.BAD_REQUEST,val.error.details[0].message)
}else{
Project.removePermission(req.body.clientId,req.params.project_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{
Project.checkOwnership(req.user.client_id,req.params.project_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{
Project.checkAccess(req.user.client_id,req.params.project_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();
});
}
}
};