diff --git a/config/passport.js b/config/passport.js index 482e26b6..4dbff5f6 100755 --- a/config/passport.js +++ b/config/passport.js @@ -1,15 +1,9 @@ 'use strict'; -var mongoose = require('mongoose'), - passport = require('passport'), - LocalStrategy = require('passport-local').Strategy, - TwitterStrategy = require('passport-twitter').Strategy, - FacebookStrategy = require('passport-facebook').Strategy, - GoogleStrategy = require('passport-google-oauth').OAuth2Strategy, - LinkedInStrategy = require('passport-linkedin').Strategy, - User = mongoose.model('User'), - config = require('./config'); - +var passport = require('passport'), + User = require('mongoose').model('User'), + path = require('path'), + utilities = require('./utilities'); module.exports = function() { // Serialize sessions @@ -17,6 +11,7 @@ module.exports = function() { done(null, user.id); }); + // Deserialize sessions passport.deserializeUser(function(id, done) { User.findOne({ _id: id @@ -25,159 +20,8 @@ module.exports = function() { }); }); - // Use local strategy - passport.use(new LocalStrategy({ - usernameField: 'email', - passwordField: 'password' - }, - function(email, password, done) { - User.findOne({ - email: email - }, function(err, user) { - if (err) { - return done(err); - } - if (!user) { - return done(null, false, { - message: 'Unknown user' - }); - } - if (!user.authenticate(password)) { - return done(null, false, { - message: 'Invalid password' - }); - } - return done(null, user); - }); - } - )); - - // Use twitter strategy - passport.use(new TwitterStrategy({ - consumerKey: config.twitter.clientID, - consumerSecret: config.twitter.clientSecret, - callbackURL: config.twitter.callbackURL - }, - function(token, tokenSecret, profile, done) { - console.log(profile); - User.findOne({ - 'providerData.id_str': profile.id - }, function(err, user) { - if (err) { - return done(err); - } - if (!user) { - user = new User({ - displayName: profile.displayName, - username: profile.username, - provider: 'twitter', - providerData: profile._json - }); - user.save(function(err) { - if (err) console.log(err); - return done(err, user); - }); - } else { - return done(err, user); - } - }); - } - )); - - // Use facebook strategy - passport.use(new FacebookStrategy({ - clientID: config.facebook.clientID, - clientSecret: config.facebook.clientSecret, - callbackURL: config.facebook.callbackURL, - }, - function(accessToken, refreshToken, profile, done) { - User.findOne({ - 'providerData.id': profile.id - }, function(err, user) { - if (err) { - return done(err); - } - if (!user) { - user = new User({ - firstName: profile.name.givenName, - lastName: profile.name.familyName, - displayName: profile.displayName, - email: profile.emails[0].value, - username: profile.username, - provider: 'facebook', - providerData: profile._json - }); - user.save(function(err) { - if (err) console.log(err); - return done(err, user); - }); - } else { - return done(err, user); - } - }); - } - )); - - // Use google strategy - passport.use(new GoogleStrategy({ - clientID: config.google.clientID, - clientSecret: config.google.clientSecret, - callbackURL: config.google.callbackURL - }, - function(accessToken, refreshToken, profile, done) { - User.findOne({ - 'providerData.id': profile.id - }, function(err, user) { - if (!user) { - user = new User({ - firstName: profile.name.givenName, - lastName: profile.name.familyName, - displayName: profile.displayName, - email: profile.emails[0].value, - username: profile.username, - provider: 'google', - providerData: profile._json - }); - user.save(function(err) { - if (err) console.log(err); - return done(err, user); - }); - } else { - return done(err, user); - } - }); - } - )); - - // Use linkedin strategy - passport.use(new LinkedInStrategy({ - consumerKey: config.linkedin.clientID, - consumerSecret: config.linkedin.clientSecret, - callbackURL: config.linkedin.callbackURL, - profileFields: ['id', 'first-name', 'last-name', 'email-address'] - }, - function(accessToken, refreshToken, profile, done) { - User.findOne({ - 'providerData.id': profile.id - }, function(err, user) { - if (!user) { - user = new User({ - firstName: profile.name.givenName, - lastName: profile.name.familyName, - displayName: profile.displayName, - email: profile.emails[0].value, - username: profile.username, - provider: 'linkedin', - providerData: profile._json - }); - user.save(function(err) { - if (err) console.log(err); - return done(err, user); - }); - } else { - return done(err, user); - } - }); - } - )); + // Initialize strategies + utilities.walk('./config/strategies', /(.*)\.(js$|coffee$)/).forEach(function(strategyPath) { + require(path.resolve(strategyPath)); + }); }; \ No newline at end of file diff --git a/config/utilities.js b/config/utilities.js index ee03717d..b046ac5d 100644 --- a/config/utilities.js +++ b/config/utilities.js @@ -6,7 +6,7 @@ var fs = require('fs'); // Walk function to recursively get files -var _walk = function(root, regex, exclude, removePath) { +var _walk = function(root, includeRegex, excludeRegex, removePath) { var output = []; var directories = []; @@ -16,7 +16,7 @@ var _walk = function(root, regex, exclude, removePath) { var stat = fs.statSync(newPath); if (stat.isFile()) { - if (regex.test(file) && (!exclude || !exclude.test(file))) { + if (includeRegex.test(file) && (!excludeRegex || !excludeRegex.test(file))) { output.push(newPath.replace(removePath, '')); } } else if (stat.isDirectory()) { @@ -26,7 +26,7 @@ var _walk = function(root, regex, exclude, removePath) { // Then recursively add directories directories.forEach(function(directory) { - output = output.concat(_walk(directory, regex, exclude, removePath)); + output = output.concat(_walk(directory, includeRegex, excludeRegex, removePath)); }); return output;