diff --git a/src/middleware/admin.js b/src/middleware/admin.js new file mode 100644 index 0000000000..bbd8850ccb --- /dev/null +++ b/src/middleware/admin.js @@ -0,0 +1,49 @@ +"use strict"; + +var app, + middleware = {}, + nconf = require('nconf'), + user = require('./../user'), + plugins = require('./../plugins'); + + +middleware.isAdmin = function (req, res, next) { + user.isAdministrator((req.user && req.user.uid) ? req.user.uid : 0, function (err, isAdmin) { + if (!isAdmin) { + res.status(403); + res.redirect('/403'); + } else { + next(); + } + }); +}; + +middleware.buildHeader = function (req, res, callback) { + var custom_header = { + 'plugins': [], + 'authentication': [] + }; + + user.getUserFields(req.user.uid, ['username', 'userslug', 'picture'], function(err, userData) { + plugins.fireHook('filter:admin.header.build', custom_header, function(err, custom_header) { + callback(err, templates['admin/header'].parse({ + csrf: res.locals.csrf_token, + relative_path: nconf.get('relative_path'), + plugins: custom_header.plugins, + authentication: custom_header.authentication, + userpicture: userData.picture, + username: userData.username, + userslug: userData.userslug, + 'cache-buster': meta.config['cache-buster'] ? 'v=' + meta.config['cache-buster'] : '', + env: process.env.NODE_ENV ? true : false + })); + }); + }); +}; + + + +module.exports = function(webserver) { + app = webserver; + return middleware; +}; \ No newline at end of file diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 1f10f192cb..cd0c2edd2a 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -278,6 +278,8 @@ middleware.processRender = function(req, res, next) { render.call(self, template, options, function(err, str) { if (res.locals.footer) { str = str + res.locals.footer; + } else if (res.locals.adminFooter) { + str = str + res.locals.adminFooter; } if (res.locals.renderHeader) { @@ -291,6 +293,14 @@ middleware.processRender = function(req, res, next) { fn(err, translated); }); }); + } else if (res.locals.renderAdminHeader) { + middleware.admin.renderHeader({ + req: req, + res: res + }, function(err, template) { + str = template + str; + fn(err, str); + }); } else { fn(err, str); } @@ -312,6 +322,7 @@ middleware.routeTouchIcon = function(req, res) { module.exports = function(webserver) { app = webserver; + middleware.admin = require('./admin')(webserver); plugins.ready(function() { // Minify client-side libraries diff --git a/src/routes/admin.js b/src/routes/admin.js index dbab9507d9..cc733c1621 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -103,10 +103,8 @@ module.exports = function(app, middleware, controllers) { }()); app.namespace('/admin', function () { - app.get('/', function (req, res) { - Admin.buildHeader(req, res, function(err, header) { - res.send(header + app.create_route('admin/index') + templates['admin/footer']); - }); + app.get('/', middleware.buildHeader, function(req, res, next) { + res.render('admin/index', {}); }); app.get('/index', function (req, res) {