/* jshint node: true */ var passport = require('passport'), _ = require('lodash'), config = require('../../config.json'), User = require('./schemas/User'), Collaborator = require('./schemas/Collaborator'), Project = require('./schemas/Project'), Layout = require('./schemas/Layout'), Blueprint = require('./schemas/Blueprint'), Plan = require('./schemas/Plan'); var middleware = { plans: [], enableCORS: function (req, res, next) { res.header('Access-Control-Allow-Credentials', true); // TODO Check https vs. http res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'X-Requested-With'); next(); }, ensureAuthenticated: function (req, res, next) { if (! req.isAuthenticated()) { req.session.returnTo = req.path; return res.redirect('/login'); } next(); }, ensureIsStaff: function (req, res, next) { if (! req.user.isStaff) { return res.redirect('http://' + config.host + '/'); } next(); }, ensureIP: function (req, res, next) { if (req.session.ip) { req.ip = req.session.ip || "127.0.0.1" } else if (req.ips) { req.ip = req.session.ip = req.ips[0] req.session.save() } next() }, ensureLocals: function (req, res, next) { res.locals.token = req.csrfToken() res.locals.logged_in = req.isAuthenticated() res.locals.user = req.user || { _id: undefined } res.locals.config = config res.locals.profile = null res.locals.ogImage = "http://okfocus.s3.amazonaws.com/images/vvalls-fb.png" res.locals.ogTitle = "VValls" res.locals.ogUrl = "http://vvalls.com/" res.locals.ogDescription = "3D gallery space, fully customizable" res.locals.ogAuthor = "VValls" res.locals.plans = middleware.plans res.locals.opt = {} next() }, ensureUserProjectsCount: function(req, res, next){ var counts = { stock: 0, basic: 0, pro: 0 } res.locals.projectCounts = counts Project.count({ user_id: req.user._id }, function(err, count){ res.locals.projectCount = count || 0 next() }) }, ensureUserLayoutsCount: function(req, res, next){ var counts = { basic: 0, pro: 0 } res.locals.layoutCounts = counts if (req.user.plan_level == 0) { return next() } Layout.count({ user_id: req.user._id }, function(err, count){ res.locals.layoutCount = count || 0 next() }) }, ensureProject: function (req, res, next) { if (req.params.slug) { Project.findOne({ slug: req.params.slug }, function(err, project){ if (err) { console.error(err) req.project = null } else if (! project) { req.project = null } else { req.project = project } next() }) } else { req.project = null next() } }, ensureLayout: function (req, res, next) { if (req.params.slug) { Layout.findOne({ slug: req.params.slug }, function(err, layout){ if (err) { console.error(err) req.layout = null } else if (! layout) { req.layout = null } else { req.layout = layout } next() }) } else { req.layout = null next() } }, ensureBlueprint: function (req, res, next) { if (req.params.slug) { Blueprint.findOne({ slug: req.params.slug }, function(err, blueprint){ if (err) { console.error(err) req.blueprint = null } else if (! blueprint) { req.blueprint = null } else { req.blueprint = blueprint } next() }) } else { req.blueprint = null next() } }, ensureIsCollaborator: function(req, res, next) { req.isCollaborator = false req.isOwner = false req.isStaff = true if (! req.user || ! req.project) { next() } else if (String(req.user._id) === String(req.project.user_id)) { req.isOwner = true next() } else { Collaborator.findOne({ user_id: req.user._id, project_id: req.project._id }, function(err, collab) { if (err || ! collab) { next() } else { req.isCollaborator = true next() } }) } }, updatePlans: function(){ Plan.find({}).sort({ 'level': -1 }).exec(function (err, plans) { middleware.plans = plans.map(function(plan){ return plan.toObject() }) }) }, } module.exports = middleware