Welcome to trackmap!
To complete your registration, follow this link and set your password:
${env.url}/account/password/${token}
Hi,
Did you request to reset your trackmap password? If so, follow this link to do so:
${env.url}/account/password/${token}
If you didn't initiate this request, just ignore this email.
` + }).then(function(){ + req.flash('success', `An email has been sent to ${req.body.email}. Check your email for instructions to reset your password. `); + res.redirect('/'); + }).catch(function(err){ + next(err); + }); + }); } }); - - } - - }); - -})); -passport.use(new GoogleTokenStrategy({ - clientID: secret.googleClientId -}, function(parsedToken, googleId, done) { - User.findOne({googleID:googleId}, function(err, user) { - if (err) { - console.log('Error finding user for gToken login with google profile ID: '+googleId+'\n'+err); } - if (!err && user !== null) { // Log in - user.lastLogin = Date.now(); - user.save(function (err) { - if (err) { - console.log('Error saving user\'s lastLogin for gToken login with google profile ID: '+googleId+'\n'+err); } + }); + + // Social + app.get('/login/:service', function(req,res,next){ + var service = req.params.service; + if (service==='google'){ + var sendParams = {scope:['profile']}; + } + if (!req.user) { // Social login + passport.authenticate(service, sendParams)(req,res,next); + } else if (!req.user.auth[service]) { // Connect social account + passport.authorize(service, sendParams)(req,res,next); + } else { // Disconnect social account + req.user.auth[service] = undefined; + req.user.save(function(err){ + if (err){ return next(err); } + else { + req.flash('success', `${mw.capitalize(service)} account disconnected. `); + res.redirect('/account'); + } }); - return done(err, user); - } else { // No such user - done(null, false); + } }); -})); + app.get('/login/:service/cb', function(req,res,next){ + var service = req.params.service; + if (!req.user) { + passport.authenticate(service, loginOutcome)(req,res,next); + } else { + req.flash('success', `${mw.capitalize(service)} account connected. `); + req.session.returnTo = '/account'; + passport.authenticate(service, connectOutcome)(req,res,next); + } + }, loginCallback); + + // Old google auth + // app.get('/auth/google', passport.authenticate('google', { scope: [ + // 'https://www.googleapis.com/auth/plus.login', + // 'https://www.googleapis.com/auth/plus.profile.emails.read' + // ] })); + // app.get('/auth/google/callback', passport.authenticate('google', { + // failureRedirect: '/', + // failureFlash: true, + // successRedirect: '/', + // successFlash: true + // } )); + + // Android auth + //TODO: See if there's a better method + app.get('/auth/google/idtoken', passport.authenticate('google-id-token'), function (req,res) { + if (!req.user) { res.sendStatus(401); } + else { res.send(req.user); } + } ); + +}; + +// passport.use(new GoogleStrategy({ +// clientID: env.googleClientId, +// clientSecret: env.googleClientSecret, +// callbackURL: env.url+'/auth/google/callback', +// passReqToCallback: true +// }, function(req, accessToken, refreshToken, profile, done) { + +// // Check for user +// User.findOne({googleID: profile.id}, function(err, user){ + +// // Error +// if (err) { console.log('Error finding user with google ID: '+profile.id+'\n'+err); } + +// // User found +// if (!err && user !== null) /* Log user in */ { +// if (!user.name) { user.name=profile.displayName; } +// user.lastLogin = Date.now(); +// user.save(function (err, raw) { +// if (err) { throwErr(req,err); } +// }); done(null, user); +// } + +// // User not found +// else /* create user */ { +// user = new User(); +// user.googleID = profile.id; +// user.name = profile.displayName; +// user.email = profile.emails[0].value; +// user.slug = slug(profile.displayName).toLowerCase(); +// user.created = Date.now(); +// user.lastLogin = Date.now(); +// // user.settings = { units:'standard', defaultMap:'road', defaultZoom:11, showSpeed:false, showTemp:false, showAlt:false, showStreetview:false }, +// // user.last = { lat:0, lon:0, dir:0, alt:0, spd:0 }, +// // user.isPro = false; +// // user.isAdmin = false; +// var cbc = 2; +// var successMessage, failMessage; + +// // Generate slug +// (function checkSlug(s,cb) { +// //console.log('checking ',s); +// User.findOne({slug:s}, function(err, existingUser){ +// if (err) { console.log('No user found for ',slug,':',err); } +// if (existingUser){ +// s = ''; +// while (s.length<6) { +// s+='abcdefghijkmnpqrtuvwxy346789'.charAt(Math.floor(Math.random()*28)); +// } +// checkSlug(s,cb); +// } else { cb(s); } +// }); +// })(user.slug, function(newSlug){ +// user.slug = newSlug; +// if (cbc>1) /* waiting on other calls */ { cbc--; } +// else { done(null, user, { success:successMessage, failure:failMessage }); } +// }); + +// // Generate sk32 +// crypto.randomBytes(32, function(err,buf) { +// if (err) {console.log('Unable to get random bytes:',err);} +// if (!buf) {console.log('Unable to get random buffer');} +// else { +// user.sk32 = buf.toString('hex'); +// user.save(function(err) { +// if (err) { +// console.log('Error saving new user '+err); +// var failMessage = 'Something went wrong creating your account. Would you like to report this error?'; +// } else { successMessage = 'Your account has been created. Next maybe you should download the android app. ' } +// if (cbc>1) /* waiting on other calls */ { cbc--; } +// else { done(null, user, { success:successMessage, failure:failMessage }); } +// }); +// } +// }); + +// } + +// }); + +// })); + +// passport.use(new GoogleTokenStrategy({ +// clientID: env.googleClientId +// }, function(parsedToken, googleId, done) { +// User.findOne({googleID:googleId}, function(err, user) { +// if (err) { +// console.log('Error finding user for gToken login with google profile ID: '+googleId+'\n'+err); } +// if (!err && user !== null) { // Log in +// user.lastLogin = Date.now(); +// user.save(function (err) { +// if (err) { +// console.log('Error saving user\'s lastLogin for gToken login with google profile ID: '+googleId+'\n'+err); } +// }); +// return done(err, user); +// } else { // No such user +// done(null, false); +// } +// }); +// })); diff --git a/config/middleware.js b/config/middleware.js index 1f473f4..eda3794 100644 --- a/config/middleware.js +++ b/config/middleware.js @@ -1,39 +1,36 @@ 'use strict'; -const secret = require('./secrets.js'); - -var throwErr = function(req,err){ - console.error('middleware.js:5 '+typeof err); - console.error('Middleware error:'+err+'\nfor request:\n'+req); - if (secret.env==='production') { - req.flash('danger', 'An error occured.