-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(*): Formatting the js per eslint
- Loading branch information
Showing
14 changed files
with
1,247 additions
and
1,195 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,115 +1,127 @@ | ||
const passport = require('passport'); | ||
const { Strategy: LocalStrategy } = require('passport-local'); | ||
const { OAuth2Strategy: GoogleStrategy } = require('passport-google-oauth'); | ||
const {Strategy: LocalStrategy} = require('passport-local'); | ||
const {OAuth2Strategy: GoogleStrategy} = require('passport-google-oauth'); | ||
|
||
const User = require('../models/User'); | ||
|
||
passport.serializeUser((user, done) => { | ||
done(null, user.id); | ||
done(null, user.id); | ||
}); | ||
|
||
passport.deserializeUser((id, done) => { | ||
User.findById(id, (err, user) => { | ||
done(err, user); | ||
}); | ||
User.findById(id, (err, user) => { | ||
done(err, user); | ||
}); | ||
}); | ||
|
||
/** | ||
* Sign in using Email and Password. | ||
*/ | ||
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => { | ||
User.findOne({ email: email.toLowerCase() }, (err, user) => { | ||
if (err) { return done(err); } | ||
if (!user) { | ||
return done(null, false, { msg: `Email ${email} not found.` }); | ||
} | ||
user.comparePassword(password, (err, isMatch) => { | ||
if (err) { return done(err); } | ||
if (isMatch) { | ||
return done(null, user); | ||
} | ||
return done(null, false, { msg: 'Invalid email or password.' }); | ||
passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => { | ||
User.findOne({email: email.toLowerCase()}, (err, user) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
if (!user) { | ||
return done(null, false, {msg: `Email ${email} not found.`}); | ||
} | ||
user.comparePassword(password, (err, isMatch) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
if (isMatch) { | ||
return done(null, user); | ||
} | ||
return done(null, false, {msg: 'Invalid email or password.'}); | ||
}); | ||
}); | ||
}); | ||
})); | ||
|
||
/** | ||
* Sign in with Google. | ||
*/ | ||
passport.use(new GoogleStrategy({ | ||
clientID: process.env.GOOGLE_ID, | ||
clientSecret: process.env.GOOGLE_SECRET, | ||
callbackURL: '/auth/google/callback', | ||
passReqToCallback: true | ||
clientID: process.env.GOOGLE_ID, | ||
clientSecret: process.env.GOOGLE_SECRET, | ||
callbackURL: '/auth/google/callback', | ||
passReqToCallback: true | ||
}, (req, accessToken, refreshToken, profile, done) => { | ||
if (req.user) { | ||
User.findOne({ google: profile.id }, (err, existingUser) => { | ||
if (err) { return done(err); } | ||
if (existingUser) { | ||
req.flash('errors', { msg: 'There is already a Google account that belongs to you. Sign in with that account or delete it, then link it with your current account.' }); | ||
done(err); | ||
} else { | ||
User.findById(req.user.id, (err, user) => { | ||
if (err) { return done(err); } | ||
user.google = profile.id; | ||
user.tokens.push({ kind: 'google', accessToken }); | ||
user.profile.name = user.profile.name || profile.displayName; | ||
user.profile.gender = user.profile.gender || profile._json.gender; | ||
user.profile.picture = user.profile.picture || profile._json.image.url; | ||
user.save((err) => { | ||
req.flash('info', { msg: 'Google account has been linked.' }); | ||
done(err, user); | ||
}); | ||
if (req.user) { | ||
User.findOne({google: profile.id}, (err, existingUser) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
if (existingUser) { | ||
req.flash('errors', {msg: 'There is already a Google account that belongs to you. Sign in with that account or delete it, then link it with your current account.'}); | ||
done(err); | ||
} else { | ||
User.findById(req.user.id, (err, user) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
user.google = profile.id; | ||
user.tokens.push({kind: 'google', accessToken}); | ||
user.profile.name = user.profile.name || profile.displayName; | ||
user.profile.gender = user.profile.gender || profile._json.gender; | ||
user.profile.picture = user.profile.picture || profile._json.image.url; | ||
user.save((err) => { | ||
req.flash('info', {msg: 'Google account has been linked.'}); | ||
done(err, user); | ||
}); | ||
}); | ||
} | ||
}); | ||
} | ||
}); | ||
} else { | ||
User.findOne({ google: profile.id }, (err, existingUser) => { | ||
if (err) { return done(err); } | ||
if (existingUser) { | ||
return done(null, existingUser); | ||
} | ||
User.findOne({ email: profile.emails[0].value }, (err, existingEmailUser) => { | ||
if (err) { return done(err); } | ||
if (existingEmailUser) { | ||
req.flash('errors', { msg: 'There is already an account using this email address. Sign in to that account and link it with Google manually from Account Settings.' }); | ||
done(err); | ||
} else { | ||
const user = new User(); | ||
user.email = profile.emails[0].value; | ||
user.google = profile.id; | ||
user.tokens.push({ kind: 'google', accessToken }); | ||
user.profile.name = profile.displayName; | ||
user.profile.gender = profile._json.gender; | ||
user.profile.picture = profile._json.image.url; | ||
user.save((err) => { | ||
done(err, user); | ||
}); | ||
} | ||
}); | ||
}); | ||
} | ||
} else { | ||
User.findOne({google: profile.id}, (err, existingUser) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
if (existingUser) { | ||
return done(null, existingUser); | ||
} | ||
User.findOne({email: profile.emails[0].value}, (err, existingEmailUser) => { | ||
if (err) { | ||
return done(err); | ||
} | ||
if (existingEmailUser) { | ||
req.flash('errors', {msg: 'There is already an account using this email address. Sign in to that account and link it with Google manually from Account Settings.'}); | ||
done(err); | ||
} else { | ||
const user = new User(); | ||
user.email = profile.emails[0].value; | ||
user.google = profile.id; | ||
user.tokens.push({kind: 'google', accessToken}); | ||
user.profile.name = profile.displayName; | ||
user.profile.gender = profile._json.gender; | ||
user.profile.picture = profile._json.image.url; | ||
user.save((err) => { | ||
done(err, user); | ||
}); | ||
} | ||
}); | ||
}); | ||
} | ||
})); | ||
|
||
/** | ||
* Login Required middleware. | ||
*/ | ||
exports.isAuthenticated = (req, res, next) => { | ||
if (req.isAuthenticated()) { | ||
return next(); | ||
} | ||
res.redirect('/login'); | ||
if (req.isAuthenticated()) { | ||
return next(); | ||
} | ||
res.redirect('/login'); | ||
}; | ||
|
||
/** | ||
* Authorization Required middleware. | ||
*/ | ||
exports.isAuthorized = (req, res, next) => { | ||
const provider = req.path.split('/').slice(-1)[0]; | ||
const token = req.user.tokens.find(token => token.kind === provider); | ||
if (token) { | ||
next(); | ||
} else { | ||
res.redirect(`/auth/${provider}`); | ||
} | ||
const provider = req.path.split('/').slice(-1)[0]; | ||
const token = req.user.tokens.find(token => token.kind === provider); | ||
if (token) { | ||
next(); | ||
} else { | ||
res.redirect(`/auth/${provider}`); | ||
} | ||
}; |
Oops, something went wrong.