diff options
Diffstat (limited to 'server/lib')
| -rw-r--r-- | server/lib/middleware.js | 1 | ||||
| -rw-r--r-- | server/lib/schemas/Project.js | 38 | ||||
| -rw-r--r-- | server/lib/schemas/User.js | 23 | ||||
| -rw-r--r-- | server/lib/views.js | 32 |
4 files changed, 74 insertions, 20 deletions
diff --git a/server/lib/middleware.js b/server/lib/middleware.js index cace91f..83613e3 100644 --- a/server/lib/middleware.js +++ b/server/lib/middleware.js @@ -39,6 +39,7 @@ var middleware = { res.locals.token = req.csrfToken(); res.locals.logged_in = req.isAuthenticated() res.locals.user = req.user || {} + res.locals.config = config next() }, diff --git a/server/lib/schemas/Project.js b/server/lib/schemas/Project.js new file mode 100644 index 0000000..a0382b3 --- /dev/null +++ b/server/lib/schemas/Project.js @@ -0,0 +1,38 @@ +/* jshint node: true */ + +var NONALPHANUMERICS_REGEX = new RegExp('[^-_a-zA-Z0-9]', 'g') + +var mongoose = require('mongoose'), + _ = require('lodash'), + config = require('../../../config.json'); + +var ProjectSchema = new mongoose.Schema({ + name: { type: String, required: true }, + slug: { + type: String, + required: true, + validate: [function (val){ + val = (val || this.displayName || "").replace(/\s/g,"-").replace(NONALPHANUMERICS_REGEX, '-').replace(/-+/g,"-") + if (! val.length) return false + return true + },"{PATH} name is required"] + }, + privacy: { + type: Boolean, + default: false, + }, + photo: { + type: String, + }, + about: { + type: String, + default: "" + }, + user_id: { type: mongoose.Schema.ObjectId, index: true }, + created_at: { type: Date }, + updated_at: { type: Date }, +}); + + +module.exports = exports = mongoose.model('project', ProjectSchema); +exports.schema = ProjectSchema; diff --git a/server/lib/schemas/User.js b/server/lib/schemas/User.js index ef8fef6..d78bfd2 100644 --- a/server/lib/schemas/User.js +++ b/server/lib/schemas/User.js @@ -10,7 +10,7 @@ var UserSchema = new mongoose.Schema({ twitter_id: String, facebook_id: String, - displayName: String, + displayName: { type: String, default: "" }, username: { type: String, required: true, @@ -36,13 +36,10 @@ var UserSchema = new mongoose.Schema({ return true }, "{PATH} is not an acceptable name"] }, - email: { - type: String, - default: "", - }, + email: { type: String, efault: "" }, emailVerified: { type: Boolean, - default: false, + default: false, }, password: { type: String, @@ -51,15 +48,11 @@ var UserSchema = new mongoose.Schema({ return true }, "{PATH} is not an acceptable password"] }, - photo: { - type: String, - }, - bio: { - type: String, - default: "" - }, - website: String, - twitterName: String, + location: { type: String, default: "" }, + photo: { type: String, default: "" }, + bio: { type: String, default: "" }, + website: { type: String, default: "" }, + twitterName: { type: String, default: "" }, isAdmin: { type: Boolean, default: false } }); diff --git a/server/lib/views.js b/server/lib/views.js index 4ab2a21..a8723eb 100644 --- a/server/lib/views.js +++ b/server/lib/views.js @@ -1,23 +1,45 @@ /* jshint node: true */ var User = require('./schemas/User'), + Project = require('./schemas/Project'), config = require('../../config'), _ = require('lodash'); exports.login = function (req, res) { res.render('login', { - config: config }); }; exports.home = function (req, res) { res.render('home', { - config: config }) } exports.profile = function (req, res) { - res.render('profile', { - config: config - }) + var username = req.params[0] + if (username) { + User.findOne({ username: username }, function (err, user) { + user ? next(user) : done(err, {}, []) + }) + } + else if (req.user) { + next(req.user) + } + else { + done() + } + + function next(user){ + Project.find({ user_id: user._id }, function(err, projects){ + done(err, user, projects) + }) + } + + function done(err, user, projects){ + if (! user) { return res.redirect('/') } + res.render('profile', { + profile: user, + projects: projects || [], + }) + } } |
