summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bower.json3
-rw-r--r--server/index.js6
-rw-r--r--server/lib/middleware.js2
-rw-r--r--server/lib/util.js1
-rw-r--r--server/lib/views/index.js (renamed from server/lib/views.js)28
-rw-r--r--server/lib/views/staff.js246
-rw-r--r--views/staff.ejs26
-rw-r--r--views/staff/_footer.ejs8
-rw-r--r--views/staff/_header.ejs12
-rw-r--r--views/staff/index.ejs10
-rw-r--r--views/staff/projects/index.ejs4
-rw-r--r--views/staff/projects/show.ejs2
-rw-r--r--views/staff/projects/show_404.ejs4
-rw-r--r--views/staff/users/index.ejs4
-rw-r--r--views/staff/users/show.ejs4
-rw-r--r--views/staff/users/show_404.ejs4
16 files changed, 313 insertions, 51 deletions
diff --git a/bower.json b/bower.json
index 0927672..ee8f9ba 100644
--- a/bower.json
+++ b/bower.json
@@ -6,6 +6,7 @@
"jquery": "1.11.0",
"momentjs": "~2.5.1",
"lodash": "",
- "fiber": ""
+ "fiber": "",
+ "jquery-jsonview": "1.2.0"
}
}
diff --git a/server/index.js b/server/index.js
index e946788..e80ddf2 100644
--- a/server/index.js
+++ b/server/index.js
@@ -97,7 +97,7 @@ site.route = function () {
app.get('/profile', views.profile)
app.get('/profile/edit', views.profile)
- app.get('/profile/:name', views.profile)
+ app.get('/profile/:username', views.profile)
app.get('/about', views.docs);
app.get('/about/:name/edit', views.docs);
@@ -106,9 +106,6 @@ site.route = function () {
app.get('/api/profile', middleware.ensureAuthenticated, api.profile.show)
app.put('/api/profile', middleware.ensureAuthenticated, api.profile.update)
- app.get('/staff', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.staff.index);
- app.get('/staff/bless', middleware.ensureAuthenticated, views.staff.bless);
-
app.get('/api/docs', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.show)
app.post('/api/docs/new', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.create)
app.post('/api/docs/edit', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.update)
@@ -148,6 +145,7 @@ site.route = function () {
app.get('/test/*', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.modal)
+ views.staff.route(app)
}
diff --git a/server/lib/middleware.js b/server/lib/middleware.js
index 9d6236a..9790f8f 100644
--- a/server/lib/middleware.js
+++ b/server/lib/middleware.js
@@ -89,7 +89,7 @@ var middleware = {
})
}
},
-
+
}
module.exports = middleware
diff --git a/server/lib/util.js b/server/lib/util.js
index 87e2d54..6d43750 100644
--- a/server/lib/util.js
+++ b/server/lib/util.js
@@ -46,6 +46,7 @@ util.ip2num = function(dot) {
}
util.num2ip = function(num) {
+ if (! num) return ""
var d = num % 256;
for (var i = 3; i > 0; i--) {
num = Math.floor(num/256);
diff --git a/server/lib/views.js b/server/lib/views/index.js
index b3c1d18..99be956 100644
--- a/server/lib/views.js
+++ b/server/lib/views/index.js
@@ -1,12 +1,12 @@
/* jshint node: true */
-var User = require('./schemas/User'),
- Project = require('./schemas/Project'),
- Documentation = require('./schemas/Documentation'),
- Collaborator = require('./schemas/Collaborator'),
- config = require('../../config'),
+var User = require('../schemas/User'),
+ Project = require('../schemas/Project'),
+ Documentation = require('../schemas/Documentation'),
+ Collaborator = require('../schemas/Collaborator'),
+ config = require('../../../config'),
marked = require('marked'),
- util = require('./util'),
+ util = require('../util'),
_ = require('lodash'),
moment = require('moment');
@@ -20,6 +20,8 @@ marked.setOptions({
var views = {}
+views.staff = require('./staff')
+
views.editor_new = function (req, res) {
if (! req.user) {
res.redirect('/')
@@ -115,7 +117,7 @@ views.docs = function (req, res){
}
views.profile = function (req, res) {
- var username = req.params[0] || (req.user && req.user.username)
+ var username = req.params.username || (req.user && req.user.username)
if (username) {
User.findOne({ username: username }, function (err, user) {
user ? next(user) : done(err, {}, [])
@@ -149,16 +151,4 @@ views.profile = function (req, res) {
}
}
-views.staff = {
- index: function(req, res){
- res.render('staff')
- },
- bless: function(req, res){
- req.user.isStaff = true
- req.user.save(function(){
- res.redirect("/staff")
- })
- },
-}
-
module.exports = views
diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js
new file mode 100644
index 0000000..5dde58d
--- /dev/null
+++ b/server/lib/views/staff.js
@@ -0,0 +1,246 @@
+/* jshint node: true */
+
+var User = require('../schemas/User'),
+ Project = require('../schemas/Project'),
+ Media = require('../schemas/Media'),
+ Collaborator = require('../schemas/Collaborator'),
+ config = require('../../../config'),
+ middleware = require('../middleware'),
+ util = require('../util'),
+ _ = require('lodash'),
+ moment = require('moment');
+
+
+var staff = module.exports = {
+
+ fields: {
+ user: "_id username displayName created_at updated_at created_ip last_ip",
+ project: "_id name slug created_at updated_at",
+ },
+
+ defaults: {
+ user: {
+ _id: "", username: "", displayName: "",
+ created_at: "", updated_at: "", created_ip: "", last_ip: "",
+ },
+ },
+
+ middleware: {
+
+ ensureUsers: function(req, res, next){
+ var offset = Number(req.params.offset) || 0
+ var sort
+ switch (req.params.sort) {
+ case 'date':
+ sort = {'date': -1}
+ break
+ default:
+ sort = {'username': 1}
+ break
+ }
+ User.find({})
+ .select(staff.fields.user)
+ .sort(sort)
+ .skip(offset)
+ .limit(50)
+ .exec(function (err, users) {
+ res.locals.users = users.map(staff.helpers.user)
+ next()
+ })
+ },
+
+ ensureProfile: function(req, res, next){
+ var username = req.params.username
+ if (username) {
+ User.findOne({ username: username }, function (err, user) {
+ if (user) {
+ res.locals.profile = staff.helpers.user(user)
+ }
+ else {
+ res.locals.profile = null
+ }
+ next()
+ })
+ }
+ else {
+ res.locals.profile = null
+ next()
+ }
+ },
+
+ ensureUsersCount: function(req, res, next){
+ if (! res.locals.profile) { return next() }
+ User.count({}, function(err, count){
+ res.locals.userCount = count || 0
+ next()
+ })
+ },
+
+ ensureProjectsCount: function(req, res, next){
+ if (! res.locals.profile) { return next() }
+ Project.count({}, function(err, count){
+ res.locals.projectCount = count || 0
+ next()
+ })
+ },
+
+ ensureProfileProjectCount: function(req, res, next){
+ if (! res.locals.profile) { return next() }
+ Project.count({ user_id: res.locals.profile._id}, function(err, count){
+ res.locals.profile.projectCount = count || 0
+ next()
+ })
+ },
+
+ ensureProfileMediaCount: function(req, res, next){
+ if (! res.locals.profile) { return next() }
+ Media.count({ user_id: res.locals.profile._id}, function(err, count){
+ res.locals.profile.mediaCount = count || 0
+ next()
+ })
+ },
+
+ ensureProfileProjects: function(req, res, next){
+ if (! res.locals.profile) { return next() }
+ Project.find({ user_id: res.locals.profile._id }, staff.fields.project, function(err, projects){
+ res.locals.projects = projects.map(staff.helpers.project)
+ next()
+ })
+ },
+
+ ensureProject: function(req, res, next){
+ res.locals.project = req.project
+ next()
+ },
+
+ ensureProjectUser: function(req, res, next){
+ if (! res.locals.project) { return next() }
+ User.findOne({ user_id: res.locals.project.user_id }, staff.fields.user, function(err, user){
+ res.locals.project.user = user || staff.defaults.user
+ next()
+ })
+ },
+
+ ensureProjectCollaborators: function(req, res, next){
+ if (! res.locals.project) {
+ res.locals.collaborators = []
+ return next()
+ }
+ Collaborator.find({ project_id: res.locals.project._id}, function(err, collaborators){
+ res.locals.collaborators = collaborators || []
+ next()
+ })
+ },
+ },
+
+ helpers: {
+ user: function(user){
+ user = user.toObject()
+ user.created_ip = util.num2ip( user.created_ip )
+ user.last_ip = util.num2ip( user.last_ip )
+ return user
+ },
+
+ project: function(project){
+ project = project.toObject()
+ return project
+ }
+ },
+
+ route: function(app){
+ app.get('/staff',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.middleware.ensureUsersCount,
+ staff.middleware.ensureProjectsCount,
+
+ staff.index
+ );
+ app.get('/staff/users',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.middleware.ensureUsersCount,
+ staff.middleware.ensureUsers,
+
+ staff.users.index
+ );
+ app.get('/staff/users/:username',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.middleware.ensureProfile,
+ staff.middleware.ensureProfileProjectCount,
+ staff.middleware.ensureProfileMediaCount,
+ staff.middleware.ensureProfileProjects,
+
+ staff.users.show
+ );
+ app.get('/staff/projects',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ staff.projects.index
+ );
+ app.get('/staff/projects/:name',
+ middleware.ensureAuthenticated,
+ middleware.ensureIsStaff,
+
+ middleware.ensureProject,
+ staff.middleware.ensureProject,
+ staff.middleware.ensureProjectUser,
+ staff.middleware.ensureProjectCollaborators,
+
+ staff.projects.show
+ );
+// app.post('/staff/bless',
+// middleware.ensureAuthenticated,
+// views.staff.bless
+// );
+ },
+
+ index: function(req, res){
+ res.render('staff/index')
+ },
+
+ bless: function(req, res){
+ req.user.isStaff = true
+ req.user.save(function(){
+ res.redirect("/staff")
+ })
+ },
+
+ // /staff/users/
+ // /staff/users/:username
+ users: {
+ index: function(req, res){
+ res.render('staff/users/index')
+ },
+ show: function(req, res){
+ if (res.locals.profile) {
+ res.render('staff/users/show')
+ }
+ else {
+ res.render('staff/users/show_404')
+ }
+ },
+ },
+
+ // /staff/projects/
+ // /staff/projects/:name
+ projects: {
+ index: function(req, res){
+ res.render('staff/projects/index')
+ },
+ show: function(req, res){
+ if (res.locals.project) {
+ res.render('staff/projects/show')
+ }
+ else {
+ res.render('staff/projects/show_404')
+ }
+ },
+ },
+
+} \ No newline at end of file
diff --git a/views/staff.ejs b/views/staff.ejs
deleted file mode 100644
index 0db8ebc..0000000
--- a/views/staff.ejs
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html>
-<html>
-<head>
- <title>vvalls</title>
- [[ include partials/meta ]]
-</head>
-<body class="loading">
-<div class="rapper page">
- [[ include partials/header ]]
-
- <br clear="all">
- <h1>Staff Area</h1>
- <!--
- - recent users
- - rooms list
- - projects list
- -->
-
- [[ include partials/confirm-modal ]]
- [[ include partials/footer ]]
-</div>
-
-
-</body>
-[[ include partials/scripts ]]
-</html>
diff --git a/views/staff/_footer.ejs b/views/staff/_footer.ejs
new file mode 100644
index 0000000..580828f
--- /dev/null
+++ b/views/staff/_footer.ejs
@@ -0,0 +1,8 @@
+ [[ include ../partials/confirm-modal ]]
+ [[ include ../partials/footer ]]
+</div>
+
+</body>
+[[ include ../partials/scripts ]]
+<script type="text/javascript" src="/assets/javascripts/vendor/bower_components/jquery-jsonview/dist/jquery.jsonview.js"></script>
+</html>
diff --git a/views/staff/_header.ejs b/views/staff/_header.ejs
new file mode 100644
index 0000000..9311948
--- /dev/null
+++ b/views/staff/_header.ejs
@@ -0,0 +1,12 @@
+<!doctype html>
+<html>
+<head>
+ <title>vvalls | staff</title>
+ [[ include ../partials/meta ]]
+ <link rel="stylesheet" href="/assets/javascripts/vendor/bower_components/jquery-jsonview/dist/jquery.jsonview.css"></script>
+</head>
+<body class="loading">
+<div class="rapper page">
+ [[ include ../partials/header ]]
+
+ <br clear="all">
diff --git a/views/staff/index.ejs b/views/staff/index.ejs
new file mode 100644
index 0000000..fbe67a7
--- /dev/null
+++ b/views/staff/index.ejs
@@ -0,0 +1,10 @@
+[[ include _header ]]
+
+ <h1>Staff Area</h1>
+ <!--
+ - recent users
+ - rooms list
+ - projects list
+ -->
+
+[[ include _footer ]] \ No newline at end of file
diff --git a/views/staff/projects/index.ejs b/views/staff/projects/index.ejs
new file mode 100644
index 0000000..a27a132
--- /dev/null
+++ b/views/staff/projects/index.ejs
@@ -0,0 +1,4 @@
+[[ include ../_header ]]
+ <h1>Projects</h1>
+
+[[ include ../_footer ]]
diff --git a/views/staff/projects/show.ejs b/views/staff/projects/show.ejs
new file mode 100644
index 0000000..01b5c76
--- /dev/null
+++ b/views/staff/projects/show.ejs
@@ -0,0 +1,2 @@
+[[ include ../_header ]]
+[[ include ../_footer ]]
diff --git a/views/staff/projects/show_404.ejs b/views/staff/projects/show_404.ejs
new file mode 100644
index 0000000..e0cf0e2
--- /dev/null
+++ b/views/staff/projects/show_404.ejs
@@ -0,0 +1,4 @@
+[[ include ../_header ]]
+ <h1>Project not found</h1>
+
+[[ include ../_footer ]]
diff --git a/views/staff/users/index.ejs b/views/staff/users/index.ejs
new file mode 100644
index 0000000..62c0ae2
--- /dev/null
+++ b/views/staff/users/index.ejs
@@ -0,0 +1,4 @@
+[[ include ../_header ]]
+ <h1>Users</h1>
+
+[[ include ../_footer ]]
diff --git a/views/staff/users/show.ejs b/views/staff/users/show.ejs
new file mode 100644
index 0000000..b5e1a6c
--- /dev/null
+++ b/views/staff/users/show.ejs
@@ -0,0 +1,4 @@
+[[ include ../_header ]]
+ <h1>User: [[ profile.username ]]</h1>
+
+[[ include ../_footer ]]
diff --git a/views/staff/users/show_404.ejs b/views/staff/users/show_404.ejs
new file mode 100644
index 0000000..c52e1e7
--- /dev/null
+++ b/views/staff/users/show_404.ejs
@@ -0,0 +1,4 @@
+[[ include ../_header ]]
+ <h1>User not found</h1>
+
+[[ include ../_footer ]]