summaryrefslogtreecommitdiff
path: root/server/lib/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/auth.js')
-rw-r--r--server/lib/auth.js110
1 files changed, 97 insertions, 13 deletions
diff --git a/server/lib/auth.js b/server/lib/auth.js
index 04ab346..22917c3 100644
--- a/server/lib/auth.js
+++ b/server/lib/auth.js
@@ -1,48 +1,132 @@
/* jshint node: true */
var passport = require('passport'),
+ FacebookStrategy = require('passport-facebook').Strategy,
+ TwitterStrategy = require('passport-twitter').Strategy,
+ passportSocketIo = require("passport.socketio"),
_ = require('lodash'),
config = require('../../config.json'),
User = require('./schemas/User');
var auth = {
- login: function (method) {
- return passport.authenticate(method);
+ init: function () {
+ passport.serializeUser(auth.serializeUser);
+ passport.deserializeUser(auth.deserializeUser);
+
+ passport.use(new TwitterStrategy({
+ consumerKey: process.env.VVALLS_TWITTER_KEY || '0L5blfBIapqhpons8bCXdIoGM',
+ consumerSecret: process.env.VVALLS_TWITTER_SECRET || '5EKW7m7inoODqYSKbp7cadBKFp1FghBl4MBDoXNcUjKtodZfuP',
+ callbackURL: 'http://' + config.host + '/auth/twitter/callback'
+ }, auth.insertTwitterUser));
+
+ passport.use(new FacebookStrategy({
+ clientID: process.env.VVALLS_FACEBOOK_KEY || '719828821410310',
+ clientSecret: process.env.VVALLS_FACEBOOK_SECRET || 'f9aba78e08f37f621eadb88b1409d48c',
+ callbackURL: 'http://' + config.host + '/auth/facebook/callback',
+ enableProof: false,
+ }, auth.insertFacebookUser));
},
+
+ initSockets: function (io, cookieParser, SessionStore) {
+ io.set('authorization', passportSocketIo.authorize({
+ cookieParser: express.cookieParser,
+ passport: passport,
+ key: 'vvalls.sid', // the name of the cookie where express/connect stores its session_id
+ secret: 'flibbertigibbet', // the session_secret to parse the cookie
+ store: SessionStore, // we NEED to use a sessionstore. no memorystore please
+ success: auth.socketSuccess,
+ fail: auth.socketFail,
+ }));
+ },
+
+ socketSuccess: function (data, accept) {
+ // console.error('successful connection to socket.io');
+ accept(null, true);
+ },
+
+ socketFail: function (data, message, error, accept){
+ if (error) {
+ throw new Error(message);
+ }
+ // console.log(data)
+ console.error('failed connection to socket.io:', message);
+ // We use this callback to log all of our failed connections.
+ accept(null, false);
+ },
+
+ // technically these returns the login middleware
+ login: function (strategy) {
+ return passport.authenticate(strategy);
+ },
+
+ loggedIn: function (strategy) {
+ return passport.authenticate(strategy, {
+ successReturnToOrRedirect: '/',
+ failureRedirect: '/login'
+ });
+ },
+
logout: function (req, res) {
req.logout();
res.redirect('/');
},
serializeUser: function (user, done) {
- done(null, user.twitter_id);
+ done(null, user._id);
},
deserializeUser: function (id, done) {
- User.findOne({ twitter_id: id }, "_id displayName username photo", function (err, user) {
+ User.findOne({ _id: id }, "_id displayName username photo", function (err, user) {
done(err, user);
});
},
- insertUser: function (accessToken, refreshToken, profile, done) {
+ insertTwitterUser: function (accessToken, refreshToken, profile, done) {
process.nextTick(function () {
var userData = {
+ twitter_id: profile.id,
username: profile.username,
displayName: profile.displayName,
- photo: profile.photos[0].value
+ photo: profile.photos[0].value,
+ links: ["https://twitter.com/" + profile.username]
};
- User.update({twitter_id: profile.id}, userData, {upsert: true}, function (userData, profile, err) {
- return done(err, _.merge(userData, {twitter_id: profile.id}));
- }.bind(this, userData, profile));
+
+ User.findOne({twitter_id: profile.id}, function(err, data){
+ if (! err && data) {
+ return done(err, data);
+ }
+ new User(userData).save(function(err, data){
+ if (err) { console.error(err) }
+ return done(err, data)
+ })
+ });
+
});
},
- loggedIn: function () {
- return passport.authenticate('twitter', {
- successReturnToOrRedirect: '/',
- failureRedirect: '/login'
+ insertFacebookUser: function (accessToken, refreshToken, profile, done) {
+ console.log(profile)
+ process.nextTick(function () {
+ var userData = {
+ facebook_id: profile.id,
+ username: profile.username || profile.displayName.toLowerCase().replace(/ /g,'-'),
+ displayName: profile.displayName,
+ photo: "http://graph.facebook.com/" + profile.id + "/picture?type=large",
+ links: [profile.profileUrl]
+ };
+
+ User.findOne({facebook_id: profile.id}, function(err, data){
+ if (! err && data) {
+ return done(err, data);
+ }
+ new User(userData).save(function(err, data){
+ if (err) { console.error(err) }
+ return done(err, data)
+ })
+ });
+
});
},