summaryrefslogtreecommitdiff
path: root/server/lib
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib')
-rw-r--r--server/lib/auth.js28
-rw-r--r--server/lib/middleware.js25
-rw-r--r--server/lib/schemas/User.js1
-rw-r--r--server/lib/util.js8
4 files changed, 59 insertions, 3 deletions
diff --git a/server/lib/auth.js b/server/lib/auth.js
index b7a2772..262d5f8 100644
--- a/server/lib/auth.js
+++ b/server/lib/auth.js
@@ -3,8 +3,10 @@
var passport = require('passport'),
FacebookStrategy = require('passport-facebook').Strategy,
TwitterStrategy = require('passport-twitter').Strategy,
+ LocalStrategy = require('passport-local').Strategy,
passportSocketIo = require("passport.socketio"),
_ = require('lodash'),
+ util = require('./util'),
config = require('../../config.json'),
User = require('./schemas/User');
@@ -14,7 +16,7 @@ var auth = {
passport.serializeUser(auth.serializeUser);
passport.deserializeUser(auth.deserializeUser);
- passport.use(auth.verifyLocalUser)
+ passport.use(new LocalStrategy(auth.verifyLocalUser))
passport.use(new TwitterStrategy({
consumerKey: process.env.VVALLS_TWITTER_KEY || '0L5blfBIapqhpons8bCXdIoGM',
@@ -85,6 +87,29 @@ var auth = {
});
},
+ signup: function (req, res){
+ var username = util.trim(req.body.username)
+ var password = req.body.password
+ var email = util.trim(req.body.email)
+
+ User.findOne({ username: username }, function (err, user) {
+ if (user) {
+ res.json({ error: { errors: { username: "Username has been taken" } } })
+ return
+ }
+ var data = {
+ username: username,
+ displayName: username,
+ password: password,
+ email: email
+ }
+ new User(data).save(function(err, data){
+ if (err || ! data) { return res.json({ error: err }) }
+ res.json({ status: "OK", payload: data })
+ })
+ })
+ },
+
verifyLocalUser: function (username, password, done) {
User.findOne({ username: username }, function(err, user){
if (err) { return done(err); }
@@ -122,7 +147,6 @@ var auth = {
},
insertFacebookUser: function (accessToken, refreshToken, profile, done) {
- console.log(profile)
process.nextTick(function () {
var userData = {
facebook_id: profile.id,
diff --git a/server/lib/middleware.js b/server/lib/middleware.js
index dea8019..cace91f 100644
--- a/server/lib/middleware.js
+++ b/server/lib/middleware.js
@@ -17,6 +17,31 @@ var middleware = {
next();
},
+ ensureAuthenticated: function (req, res, next) {
+ if (! req.isAuthenticated()) {
+ req.session.returnTo = req.path;
+ return res.redirect('/login');
+ }
+ next();
+ },
+
+ ensureIsAdmin: function (req, res, next) {
+ User.findOne({ _id: req.user._id }, function (err, user) {
+ if (! user.isAdmin) {
+ return res.redirect('http://' + config.host + '/' + req.user.username);
+ }
+ req.user = user
+ next();
+ });
+ },
+
+ ensureLocals: function (req, res, next) {
+ res.locals.token = req.csrfToken();
+ res.locals.logged_in = req.isAuthenticated()
+ res.locals.user = req.user || {}
+ next()
+ },
+
}
module.exports = middleware
diff --git a/server/lib/schemas/User.js b/server/lib/schemas/User.js
index 76a1255..c619685 100644
--- a/server/lib/schemas/User.js
+++ b/server/lib/schemas/User.js
@@ -53,7 +53,6 @@ var UserSchema = new mongoose.Schema({
},
photo: {
type: String,
- required: true
},
bio: {
type: String,
diff --git a/server/lib/util.js b/server/lib/util.js
new file mode 100644
index 0000000..45902f3
--- /dev/null
+++ b/server/lib/util.js
@@ -0,0 +1,8 @@
+
+var whitespaceHead = /^\s+/
+var whitespaceTail = /\s+$/
+
+var util = {}
+util.trim = function (s){ return s.replace(whitespaceHead,"").replace(whitespaceTail,"") }
+
+module.exports = util