mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-02-27 16:50:59 +01:00
feat(log): add traces server routes, policies and controllers
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
var path = require('path'),
|
||||
config = require(path.resolve('./config/config')),
|
||||
mongoose = require('mongoose'),
|
||||
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
|
||||
User = mongoose.model('User'),
|
||||
Trace = mongoose.model('Trace'),
|
||||
async = require('async');
|
||||
|
||||
/**
|
||||
* list Traces
|
||||
* @param req
|
||||
* @param res
|
||||
*/
|
||||
exports.list = function (req, res) {
|
||||
Trace.find({})
|
||||
.sort('-createdat')
|
||||
.populate('user', 'displayName profileImageURL uploaded downloaded')
|
||||
.exec(function (err, traces) {
|
||||
if (err) {
|
||||
return res.status(422).send({
|
||||
message: errorHandler.getErrorMessage(err)
|
||||
});
|
||||
}
|
||||
res.json(traces);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* delete Trace
|
||||
* @param req
|
||||
* @param res
|
||||
*/
|
||||
exports.delete = function (req, res) {
|
||||
var trace = req.trace;
|
||||
trace.remove(function (err) {
|
||||
if (err) {
|
||||
return res.status(422).send({
|
||||
message: errorHandler.getErrorMessage(err)
|
||||
});
|
||||
} else {
|
||||
res.json(trace);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Invitation middleware
|
||||
*/
|
||||
exports.traceByID = function (req, res, next, id) {
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
return res.status(400).send({
|
||||
message: 'Trace is invalid'
|
||||
});
|
||||
}
|
||||
|
||||
Trace.findById(id)
|
||||
.populate('user', 'displayName profileImageURL uploaded downloaded')
|
||||
.exec(function (err, trace) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else if (!trace) {
|
||||
return res.status(404).send({
|
||||
message: 'No trace with that identifier has been found'
|
||||
});
|
||||
}
|
||||
req.trace = trace;
|
||||
next();
|
||||
});
|
||||
};
|
||||
|
||||
50
modules/traces/server/policies/traces.server.policy.js
Normal file
50
modules/traces/server/policies/traces.server.policy.js
Normal file
@@ -0,0 +1,50 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
var acl = require('acl');
|
||||
|
||||
// Using the memory backend
|
||||
acl = new acl(new acl.memoryBackend());
|
||||
|
||||
/**
|
||||
* Invoke Invitations Permissions
|
||||
*/
|
||||
exports.invokeRolesPolicies = function () {
|
||||
acl.allow(
|
||||
[
|
||||
{
|
||||
roles: ['admin', 'oper', 'user'],
|
||||
allows: [
|
||||
{resources: '/api/traces', permissions: '*'},
|
||||
{resources: '/api/traces/:traceId', permissions: '*'}
|
||||
]
|
||||
}
|
||||
]
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check If Invitations Policy Allows
|
||||
*/
|
||||
exports.isAllowed = function (req, res, next) {
|
||||
var roles = (req.user) ? req.user.roles : ['guest'];
|
||||
|
||||
// Check for user roles
|
||||
acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function (err, isAllowed) {
|
||||
if (err) {
|
||||
// An authorization error occurred
|
||||
return res.status(500).send('Unexpected authorization error');
|
||||
} else {
|
||||
if (isAllowed) {
|
||||
// Access granted! Invoke next middleware
|
||||
return next();
|
||||
} else {
|
||||
return res.status(403).json({
|
||||
message: 'User is not authorized'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
17
modules/traces/server/routes/traces.server.routes.js
Normal file
17
modules/traces/server/routes/traces.server.routes.js
Normal file
@@ -0,0 +1,17 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
var tracesPolicy = require('../policies/traces.server.policy'),
|
||||
traces = require('../controllers/traces.server.controller');
|
||||
|
||||
module.exports = function (app) {
|
||||
app.route('/api/traces').all(tracesPolicy.isAllowed)
|
||||
.get(traces.list);
|
||||
|
||||
app.route('/api/traces/:traceId').all(tracesPolicy.isAllowed)
|
||||
.delete(traces.delete);
|
||||
|
||||
app.param('traceId', traces.traceByID);
|
||||
};
|
||||
Reference in New Issue
Block a user