From bdc495782a21d475f01c2d913758e4fae74fa221 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Thu, 5 Jun 2014 20:21:03 -0400 Subject: [PATCH 1/5] Use new Express 4 routes notation --- app.js | 169 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 128 insertions(+), 41 deletions(-) diff --git a/app.js b/app.js index 18e6aabd3a9..93ebefbf87c 100755 --- a/app.js +++ b/app.js @@ -114,47 +114,134 @@ app.use(express.static(path.join(__dirname, 'public'), { maxAge: week })); * Application routes. */ -app.get('/', homeController.index); -app.get('/login', userController.getLogin); -app.post('/login', userController.postLogin); -app.get('/logout', userController.logout); -app.get('/forgot', userController.getForgot); -app.post('/forgot', userController.postForgot); -app.get('/reset/:token', userController.getReset); -app.post('/reset/:token', userController.postReset); -app.get('/signup', userController.getSignup); -app.post('/signup', userController.postSignup); -app.get('/contact', contactController.getContact); -app.post('/contact', contactController.postContact); -app.get('/account', passportConf.isAuthenticated, userController.getAccount); -app.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile); -app.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword); -app.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount); -app.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink); +app.route('/') + .get(homeController.index); -app.get('/api', apiController.getApi); -app.get('/api/lastfm', apiController.getLastfm); -app.get('/api/nyt', apiController.getNewYorkTimes); -app.get('/api/aviary', apiController.getAviary); -app.get('/api/steam', apiController.getSteam); -app.get('/api/stripe', apiController.getStripe); -app.post('/api/stripe', apiController.postStripe); -app.get('/api/scraping', apiController.getScraping); -app.get('/api/twilio', apiController.getTwilio); -app.post('/api/twilio', apiController.postTwilio); -app.get('/api/clockwork', apiController.getClockwork); -app.post('/api/clockwork', apiController.postClockwork); -app.get('/api/foursquare', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFoursquare); -app.get('/api/tumblr', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTumblr); -app.get('/api/facebook', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFacebook); -app.get('/api/github', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getGithub); -app.get('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTwitter); -app.post('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postTwitter); -app.get('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getVenmo); -app.post('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postVenmo); -app.get('/api/linkedin', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getLinkedin); -app.get('/api/instagram', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getInstagram); -app.get('/api/yahoo', apiController.getYahoo); +app.route('/login') + .get(userController.getLogin) + .post(userController.postLogin); + +app.route('/logout') + .get(userController.logout); + +app.route('/forgot') + .get(userController.getForgot) + .post(userController.postForgot); + +app.route('/reset/:token') + .get(userController.getReset) + .post(userController.postReset); + +app.route('/signup') + .get(userController.getSignup) + .post(userController.postSignup); + +app.route('/contact') + .get(contactController.getContact) + .post(contactController.postContact); + +app.route('/account') + .all(passportConf.isAuthenticated) + .get(userController.getAccount); + +app.route('/account/profile') + .all(passportConf.isAuthenticated) + .post(userController.postUpdateProfile); + +app.route('/account/password') + .all(passportConf.isAuthenticated) + .post(userController.postUpdatePassword); + +app.route('/account/delete') + .all(passportConf.isAuthenticated) + .post(userController.postDeleteAccount); + +app.route('/account/unlink/:provider') + .all(passportConf.isAuthenticated) + .get(userController.getOauthUnlink); + +app.route('/api') + .get(apiController.getApi); + +app.route('/api/lastfm') + .get(apiController.getLastfm); + +app.route('/api/nyt') + .get(apiController.getNewYorkTimes); + +app.route('/api/aviary') + .get(apiController.getAviary); + +app.route('/api/steam') + .get(apiController.getSteam); + +app.route('/api/aviary') + .get(apiController.getAviary); + +app.route('/api/scraping') + .get(apiController.getScraping); + +app.route('/api/yahoo') + .get(apiController.getYahoo) + +app.route('/api/stripe') + .get(apiController.getStripe) + .post(apiController.postStripe); + +app.route('/api/twilio') + .get(apiController.getTwilio) + .post(apiController.postTwilio); + +app.route('/api/clockwork') + .get(apiController.getClockwork) + .post(apiController.postClockwork); + +app.route('/api/foursquare') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getFoursquare); + +app.route('/api/tumblr') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getTumblr); + +app.route('/api/foursquare') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getFoursquare); + +app.route('/api/facebook') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getFacebook); + +app.route('/api/github') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getGithub); + +app.route('/api/twitter') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getTwitter) + .post(apiController.postTwitter); + +app.route('/api/venmo') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getVenmo) + .post(apiController.postVenmo); + +app.route('/api/linkedin') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getLinkedin) + +app.route('/api/instagram') + .all(passportConf.isAuthenticated) + .all(passportConf.isAuthorized) + .get(apiController.getInstagram) /** * OAuth routes for sign-in. @@ -217,4 +304,4 @@ app.listen(app.get('port'), function() { console.log('Express server listening on port %d in %s mode', app.get('port'), app.get('env')); }); -module.exports = app; +module.exports = app; \ No newline at end of file From 1807e9edc776ffbe9d46c60a11a16d29582f3ed9 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Fri, 6 Jun 2014 14:58:30 -0400 Subject: [PATCH 2/5] Updated comments, added missing semicolons, moved compress() middleware up one level above connect-assets --- app.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app.js b/app.js index 93ebefbf87c..9804212fe38 100755 --- a/app.js +++ b/app.js @@ -21,7 +21,7 @@ var expressValidator = require('express-validator'); var connectAssets = require('connect-assets'); /** - * Load controllers. + * Controllers (route handlers). */ var homeController = require('./controllers/home'); @@ -30,7 +30,7 @@ var apiController = require('./controllers/api'); var contactController = require('./controllers/contact'); /** - * API keys + Passport configuration. + * API keys and Passport configuration. */ var secrets = require('./config/secrets'); @@ -43,7 +43,7 @@ var passportConf = require('./config/passport'); var app = express(); /** - * Mongoose configuration. + * Connect to MongoDB. */ mongoose.connect(secrets.db); @@ -68,11 +68,11 @@ var whitelist = ['/url1', '/url2']; app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); +app.use(compress()); app.use(connectAssets({ paths: ['public/css', 'public/js'], helperContext: app.locals })); -app.use(compress()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); @@ -111,7 +111,7 @@ app.use(function(req, res, next) { app.use(express.static(path.join(__dirname, 'public'), { maxAge: week })); /** - * Application routes. + * Primary routes. */ app.route('/') @@ -160,6 +160,10 @@ app.route('/account/unlink/:provider') .all(passportConf.isAuthenticated) .get(userController.getOauthUnlink); +/** + * API examples routes. + */ + app.route('/api') .get(apiController.getApi); @@ -182,7 +186,7 @@ app.route('/api/scraping') .get(apiController.getScraping); app.route('/api/yahoo') - .get(apiController.getYahoo) + .get(apiController.getYahoo); app.route('/api/stripe') .get(apiController.getStripe) @@ -236,15 +240,15 @@ app.route('/api/venmo') app.route('/api/linkedin') .all(passportConf.isAuthenticated) .all(passportConf.isAuthorized) - .get(apiController.getLinkedin) + .get(apiController.getLinkedin); app.route('/api/instagram') .all(passportConf.isAuthenticated) .all(passportConf.isAuthorized) - .get(apiController.getInstagram) + .get(apiController.getInstagram); /** - * OAuth routes for sign-in. + * OAuth sign-in routes. */ app.get('/auth/instagram', passport.authenticate('instagram')); @@ -273,7 +277,7 @@ app.get('/auth/linkedin/callback', passport.authenticate('linkedin', { failureRe }); /** - * OAuth routes for API examples that require authorization. + * OAuth authorization routes for API examples. */ app.get('/auth/foursquare', passport.authorize('foursquare')); @@ -291,7 +295,6 @@ app.get('/auth/venmo/callback', passport.authorize('venmo', { failureRedirect: ' /** * 500 Error Handler. - * As of Express 4.0 it must be placed at the end, after all routes. */ app.use(errorHandler()); From 4c7b0d275b5beaddd8e35bc6a89963c753b3f586 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Fri, 6 Jun 2014 15:23:28 -0400 Subject: [PATCH 3/5] Reverted back to express 3 style routes --- app.js | 169 ++++++++++++++------------------------------------------- 1 file changed, 41 insertions(+), 128 deletions(-) diff --git a/app.js b/app.js index 9804212fe38..f12bd4d24cf 100755 --- a/app.js +++ b/app.js @@ -111,141 +111,54 @@ app.use(function(req, res, next) { app.use(express.static(path.join(__dirname, 'public'), { maxAge: week })); /** - * Primary routes. + * Main routes. */ -app.route('/') - .get(homeController.index); - -app.route('/login') - .get(userController.getLogin) - .post(userController.postLogin); - -app.route('/logout') - .get(userController.logout); - -app.route('/forgot') - .get(userController.getForgot) - .post(userController.postForgot); - -app.route('/reset/:token') - .get(userController.getReset) - .post(userController.postReset); - -app.route('/signup') - .get(userController.getSignup) - .post(userController.postSignup); - -app.route('/contact') - .get(contactController.getContact) - .post(contactController.postContact); - -app.route('/account') - .all(passportConf.isAuthenticated) - .get(userController.getAccount); - -app.route('/account/profile') - .all(passportConf.isAuthenticated) - .post(userController.postUpdateProfile); - -app.route('/account/password') - .all(passportConf.isAuthenticated) - .post(userController.postUpdatePassword); - -app.route('/account/delete') - .all(passportConf.isAuthenticated) - .post(userController.postDeleteAccount); - -app.route('/account/unlink/:provider') - .all(passportConf.isAuthenticated) - .get(userController.getOauthUnlink); +app.get('/', homeController.index); +app.get('/login', userController.getLogin); +app.post('/login', userController.postLogin); +app.get('/logout', userController.logout); +app.get('/forgot', userController.getForgot); +app.post('/forgot', userController.postForgot); +app.get('/reset/:token', userController.getReset); +app.post('/reset/:token', userController.postReset); +app.get('/signup', userController.getSignup); +app.post('/signup', userController.postSignup); +app.get('/contact', contactController.getContact); +app.post('/contact', contactController.postContact); +app.get('/account', passportConf.isAuthenticated, userController.getAccount); +app.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile); +app.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword); +app.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount); +app.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink); /** * API examples routes. */ -app.route('/api') - .get(apiController.getApi); - -app.route('/api/lastfm') - .get(apiController.getLastfm); - -app.route('/api/nyt') - .get(apiController.getNewYorkTimes); - -app.route('/api/aviary') - .get(apiController.getAviary); - -app.route('/api/steam') - .get(apiController.getSteam); - -app.route('/api/aviary') - .get(apiController.getAviary); - -app.route('/api/scraping') - .get(apiController.getScraping); - -app.route('/api/yahoo') - .get(apiController.getYahoo); - -app.route('/api/stripe') - .get(apiController.getStripe) - .post(apiController.postStripe); - -app.route('/api/twilio') - .get(apiController.getTwilio) - .post(apiController.postTwilio); - -app.route('/api/clockwork') - .get(apiController.getClockwork) - .post(apiController.postClockwork); - -app.route('/api/foursquare') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getFoursquare); - -app.route('/api/tumblr') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getTumblr); - -app.route('/api/foursquare') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getFoursquare); - -app.route('/api/facebook') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getFacebook); - -app.route('/api/github') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getGithub); - -app.route('/api/twitter') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getTwitter) - .post(apiController.postTwitter); - -app.route('/api/venmo') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getVenmo) - .post(apiController.postVenmo); - -app.route('/api/linkedin') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getLinkedin); - -app.route('/api/instagram') - .all(passportConf.isAuthenticated) - .all(passportConf.isAuthorized) - .get(apiController.getInstagram); +app.get('/api', apiController.getApi); +app.get('/api/lastfm', apiController.getLastfm); +app.get('/api/nyt', apiController.getNewYorkTimes); +app.get('/api/aviary', apiController.getAviary); +app.get('/api/steam', apiController.getSteam); +app.get('/api/stripe', apiController.getStripe); +app.post('/api/stripe', apiController.postStripe); +app.get('/api/scraping', apiController.getScraping); +app.get('/api/twilio', apiController.getTwilio); +app.post('/api/twilio', apiController.postTwilio); +app.get('/api/clockwork', apiController.getClockwork); +app.post('/api/clockwork', apiController.postClockwork); +app.get('/api/foursquare', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFoursquare); +app.get('/api/tumblr', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTumblr); +app.get('/api/facebook', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFacebook); +app.get('/api/github', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getGithub); +app.get('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTwitter); +app.post('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postTwitter); +app.get('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getVenmo); +app.post('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postVenmo); +app.get('/api/linkedin', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getLinkedin); +app.get('/api/instagram', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getInstagram); +app.get('/api/yahoo', apiController.getYahoo); /** * OAuth sign-in routes. From bebc4aaf5cfbbb040a41fc8a45d080d020dc9198 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Fri, 6 Jun 2014 15:30:07 -0400 Subject: [PATCH 4/5] Added a flash message "your account has been deleted" --- controllers/user.js | 1 + 1 file changed, 1 insertion(+) diff --git a/controllers/user.js b/controllers/user.js index b347774b6d0..219ad8f29a8 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -184,6 +184,7 @@ exports.postDeleteAccount = function(req, res, next) { User.remove({ _id: req.user.id }, function(err) { if (err) return next(err); req.logout(); + req.flash('info', { msg: 'Your account has been deleted.' }); res.redirect('/'); }); }; From 3c857f5b073ab949a6cec7e71a1a28849c8457da Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Fri, 6 Jun 2014 15:35:16 -0400 Subject: [PATCH 5/5] Updated user controller comments --- controllers/user.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/controllers/user.js b/controllers/user.js index 219ad8f29a8..582e62b60d0 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -177,7 +177,6 @@ exports.postUpdatePassword = function(req, res, next) { /** * POST /account/delete * Delete user account. - * @param id - User ObjectId */ exports.postDeleteAccount = function(req, res, next) { @@ -191,9 +190,8 @@ exports.postDeleteAccount = function(req, res, next) { /** * GET /account/unlink/:provider - * Unlink OAuth2 provider from the current user. + * Unlink OAuth provider. * @param provider - * @param id - User ObjectId */ exports.getOauthUnlink = function(req, res, next) { @@ -221,7 +219,6 @@ exports.getReset = function(req, res) { if (req.isAuthenticated()) { return res.redirect('/'); } - User .findOne({ resetPasswordToken: req.params.token }) .where('resetPasswordExpires').gt(Date.now()) @@ -239,6 +236,7 @@ exports.getReset = function(req, res) { /** * POST /reset/:token * Process the reset password request. + * @param token */ exports.postReset = function(req, res, next) {