UNPKG

gathering

Version:

A social event management platform

102 lines (86 loc) 3.13 kB
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