From 5a1fe526621153dc34c7d3ca22811c8e66654735 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Tue, 31 Oct 2017 11:41:02 +0800 Subject: [PATCH] feat(backup): new module 'Backup' menu, route, controller, policy of server side --- .../server/config/backup.server.config.js | 14 ++++++ .../controllers/backup.server.controller.js | 39 +++++++++++++++ .../server/policies/backup.server.policy.js | 49 +++++++++++++++++++ .../server/routes/backup.server.routes.js | 14 ++++++ 4 files changed, 116 insertions(+) create mode 100644 modules/backup/server/config/backup.server.config.js create mode 100644 modules/backup/server/controllers/backup.server.controller.js create mode 100644 modules/backup/server/policies/backup.server.policy.js create mode 100644 modules/backup/server/routes/backup.server.routes.js diff --git a/modules/backup/server/config/backup.server.config.js b/modules/backup/server/config/backup.server.config.js new file mode 100644 index 00000000..629c3606 --- /dev/null +++ b/modules/backup/server/config/backup.server.config.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Module dependencies + */ +var path = require('path'), + config = require(path.resolve('./config/config')); + +/** + * Module init function. + */ +module.exports = function (app, db) { + +}; diff --git a/modules/backup/server/controllers/backup.server.controller.js b/modules/backup/server/controllers/backup.server.controller.js new file mode 100644 index 00000000..cb21b0ee --- /dev/null +++ b/modules/backup/server/controllers/backup.server.controller.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Module dependencies + */ +var path = require('path'), + fs = require('fs'), + config = require(path.resolve('./config/config')), + errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), + traceLogCreate = require(path.resolve('./config/lib/tracelog')).create; + +var traceConfig = config.meanTorrentConfig.trace; +var backupConfig = config.meanTorrentConfig.backup; + +var mtDebug = require(path.resolve('./config/lib/debug')); + +/** + * List of collections + */ +exports.list = function (req, res) { + var files = fs.readdirSync(backupConfig.dir); + const response = []; + for (let file of files) { + const fileInfo = fs.statSync(backupConfig.dir + file); + response.push({ + name: file, + size: fileInfo.size, + ctime: fileInfo.ctime + }); + } + res.json(response); +}; + +/** + * Delete an collection + */ +exports.delete = function (req, res) { + +}; diff --git a/modules/backup/server/policies/backup.server.policy.js b/modules/backup/server/policies/backup.server.policy.js new file mode 100644 index 00000000..123d9ffb --- /dev/null +++ b/modules/backup/server/policies/backup.server.policy.js @@ -0,0 +1,49 @@ +'use strict'; + +/** + * Module dependencies + */ +var acl = require('acl'); + +// Using the memory backend +acl = new acl(new acl.memoryBackend()); + +/** + * Invoke Torrents Permissions + */ +exports.invokeRolesPolicies = function () { + acl.allow( + [ + { + roles: ['admin', 'oper'], + allows: [ + {resources: '/api/backup', permissions: '*'} + ] + } + ] + ); +}; + +/** + * Check If Articles 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' + }); + } + } + }); +}; diff --git a/modules/backup/server/routes/backup.server.routes.js b/modules/backup/server/routes/backup.server.routes.js new file mode 100644 index 00000000..2cf77f73 --- /dev/null +++ b/modules/backup/server/routes/backup.server.routes.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Module dependencies + */ +var backup = require('../controllers/backup.server.controller'), + backupPolicy = require('../policies/backup.server.policy'); + + +module.exports = function (app) { + app.route('/api/backup').all(backupPolicy.isAllowed) + .get(backup.list) + .delete(backup.delete); +};