var Express = require('express'); var Router = Express.Router(); var EventEmitter = require('events'); var RoleModel = require('../models/role'); var Token = require('../modules/token'); function updateRole (req, res, next) { Token.verifyThen(req.get('authorization'), 'super', (err, decoded) => { if (err) { res.status(403).json({ message: 'User not authorized to perform this action.', err: err }); return; } var RoleEvents = new EventEmitter(); var id = req.params.id; var data = req.body; RoleEvents.once('updateRole', (err, result) => { if (err) { res.status(500).json({message: 'Could not update role id ' + id, err: err}); } if (result) { res.status(200).json(result); } }); RoleModel.updateRole(RoleEvents, id, data); }); } Router.route('/') .post((req, res, next) => { Token.verifyThen(req.get('authorization'), 'super', (err, decoded) => { if (err) { res.status(403).json({ message: 'User not authorized to perform this action.', err: err }); return; } var RoleEvents = new EventEmitter(); var role = req.body; RoleEvents.once('createRole', (err, result) => { if (err) { res.status(500).json({ message: 'Could not create role', err: err }); } if (result) { res.status(200).json(result); } }); RoleModel.createRole(RoleEvents, role); }); }); Router.route('/search/:find?') .get((req, res, next) => { Token.verifyThen(req.get('authorization'), 'super', (err, decoded) => { if (err) { res.status(403).json({ message: 'User not authorized to perform this action.', err: err }); return; } var RoleEvents = new EventEmitter(); // Process parameters var find = req.params.find ? decodeURIComponent(req.params.find) : false; if (find) { find = { 'name': new RegExp(find, 'i') }; } // Setup query object var query = { find: find || (req.query.find ? JSON.parse(decodeURIComponent(req.query.find)) : {}), select: req.query.select ? decodeURIComponent(req.query.select) : null, options: { limit: req.query.limit ? parseInt(req.query.limit) : 0, skip: req.query.ski ? parseInt(req.query.skip) : 0, sort: req.query.sort ? JSON.parse(decodeURIComponent(req.query.sort)) : { 'value': 1 } } }; RoleEvents.once('getRoles', (err, result) => { if (err) { res.status(500).json({ message: 'There was an error performing the role search', err: err }); } if (result) { res.status(200).json(result); } }); RoleModel.getRoles(RoleEvents, query); }); }); Router.route('/:id?') .get( (req, res, next) => { Token.verifyThen(req.get('authorization'), 'view', (err, decoded) => { if (err) { res.status(403).json({ message: 'User not authorized to perform this action.', err: err }); return; } var RoleEvents = new EventEmitter(); var id = req.params.id || false; var method = id ? 'getRole' : 'getRoles'; RoleEvents.once(method, (err, result) => { if (err) { res.status(500).json({ message: 'Could not get role' + (id ? '' : 's'), err: err }); } if (result) { res.status(200).json(result); } }); RoleModel[method](RoleEvents, id || null); }); }) .put( updateRole ) .patch( updateRole ) .delete( (req, res, next) => { Token.verifyThen(req.get('authorization'), 'super', (err, decoded) => { if (err) { res.status(403).json({ message: 'User not authorized to perform this action.', err: err }); return; } var RoleEvents = new EventEmitter(); var id = req.params.id; RoleEvents.once('deleteRole', (err, result) => { if (err) { res.status(500).json({message: 'Could not delete role id ' + id, err: err}); } if (result) { res.status(204).json({}); } }); RoleModel.deleteRole(RoleEvents, id); }); }); module.exports = Router;