summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/index.js3
-rw-r--r--server/lib/middleware.js1
-rw-r--r--server/lib/schemas/Project.js38
-rw-r--r--server/lib/schemas/User.js23
-rw-r--r--server/lib/views.js32
5 files changed, 76 insertions, 21 deletions
diff --git a/server/index.js b/server/index.js
index a45ff36..01f861b 100644
--- a/server/index.js
+++ b/server/index.js
@@ -68,7 +68,8 @@ app.get('/auth/twitter', auth.login('twitter'));
app.get('/auth/twitter/callback', auth.loggedIn('twitter'));
app.get('/auth/facebook', auth.login('facebook'));
app.get('/auth/facebook/callback', auth.loggedIn('facebook'));
-
+app.get('/profile', views.profile)
+app.get(/^\/([-_a-zA-Z0-9]+)\/?$/, views.profile)
/*
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 || [],
+ })
+ }
}