/* 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 = { 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._id); }, deserializeUser: function (id, done) { User.findOne({ _id: id }, "_id displayName username photo", function (err, user) { done(err, user); }); }, 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, links: ["https://twitter.com/" + profile.username] }; 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) }) }); }); }, 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) }) }); }); }, } module.exports = auth