gathering
Version:
A social event management platform
102 lines (86 loc) • 3.13 kB
text/coffeescript
FacebookStrategy = require('passport-facebook').Strategy
TwitterStrategy = require('passport-twitter').Strategy
GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
GitHubStrategy = require('passport-github').Strategy
LocalStrategy = require('passport-local').Strategy
LocalAccount = require '../models/local-account'
mongoose = require 'mongoose'
Account = require '../models/account.coffee'
User = require '../models/user.coffee'
parse_profile = (profile) ->
account =
provider: profile.provider
provider_id: do profile.id.toString
user = {}
if 'emails' of profile
account.emails = profile.emails.map (item) -> item = item.value
user.email = account.emails[0]
if profile.provider is 'github' or 'twitter'
[name, user.first_name, user.last_name] = profile.displayName.match /(\S*)\s*(.*)/
else
user.first_name = profile.name.givenName
user.last_name = profile.name.familyName
account: account
user: user
oauth_authenticate = (accessToken, refreshToken, profile, done) ->
{account, user} = parse_profile profile
Account.findOne
provider: profile.provider
provider_id: do profile.id.toString,
(err, found) ->
return done err if err
if found
User.populate found, path:'user', (err, populated) ->
if err
done err
if populated
done null, populated.user
else
User.create user, (err, user) ->
return done err if err or not user
account.user = user._id
Account.create account, (err, account) ->
return done err if err
done null, user
module.exports = (passport) ->
passport.serializeUser (user, done) ->
done null, do user.publicify
passport.deserializeUser (user, done) ->
done null, user
passport.use new GoogleStrategy
clientID: '312119867391-77cfq0v5cegqkqtg11irmi0o6big7gqt.apps.googleusercontent.com'
clientSecret: 'yfCIJmtG9YA1_FOFoVyrEtTM'
callbackURL: 'http://127.0.0.1:3000/auth/google/callback',
oauth_authenticate
passport.use new GitHubStrategy
clientID: '1fc46b1a169447b9479f'
clientSecret: 'b9eb6728663f79e3a30092a53af66b463fcc3886'
callbackURL: 'http://127.0.0.1:3000/auth/github/callback',
oauth_authenticate
passport.use new FacebookStrategy
clientID: '607413499378842'
clientSecret: '54fd4d2e3f7819dc0f8120bc514fa437'
callbackURL: 'http://localhost:3000/auth/facebook/callback',
oauth_authenticate
passport.use new TwitterStrategy
consumerKey: 'KPVReIlwhp4Uk7SYvT0oXeCzT'
consumerSecret: 'M9qLYNFB2BMTZbILQsgBqDaez2Q8gJhRPFqYpLQuh7W0GphUYP'
callbackURL: 'http://127.0.0.1:3000/auth/twitter/callback',
oauth_authenticate
passport.use new LocalStrategy
usernameField: 'email'
passwordField: 'password',
(email, password, done) ->
LocalAccount.findOne email:email, (err, account) ->
return done err if err or not account
account.match_password password, (err, ok) ->
if err
return done err
if not ok
done null, false
else
User.populate account, path:'user', (err, populated) ->
if err
done err
if populated
done null, populated.user