| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  | var Rx = require('rx'), | 
					
						
							|  |  |  |     Twit = require('twit'), | 
					
						
							| 
									
										
										
										
											2015-06-01 16:48:16 -07:00
										 |  |  |     async = require('async'), | 
					
						
							|  |  |  |     moment = require('moment'), | 
					
						
							|  |  |  |     request = require('request'), | 
					
						
							|  |  |  |     debug = require('debug')('freecc:cntr:resources'), | 
					
						
							| 
									
										
										
										
											2015-06-03 17:14:45 -07:00
										 |  |  |     constantStrings = require('../utils/constantStrings.json'), | 
					
						
							| 
									
										
										
										
											2015-10-07 00:26:17 -07:00
										 |  |  |     labs = require('../resources/labs.json'), | 
					
						
							|  |  |  |     testimonials = require('../resources/testimonials.json'), | 
					
						
							| 
									
										
										
										
											2015-06-02 15:05:26 -07:00
										 |  |  |     secrets = require('../../config/secrets'); | 
					
						
							| 
									
										
										
										
											2015-06-01 16:48:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  | module.exports = function(app) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:31:42 -07:00
										 |  |  |   var router = app.loopback.Router(); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   var User = app.models.User; | 
					
						
							|  |  |  |   var Challenge = app.models.Challenge; | 
					
						
							| 
									
										
										
										
											2015-06-20 20:54:39 -07:00
										 |  |  |   var Story = app.models.Story; | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   var Nonprofit = app.models.Nonprofit; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   router.get('/api/github', githubCalls); | 
					
						
							|  |  |  |   router.get('/api/blogger', bloggerCalls); | 
					
						
							|  |  |  |   router.get('/api/trello', trelloCalls); | 
					
						
							|  |  |  |   router.get('/api/codepen/twitter/:screenName', twitter); | 
					
						
							|  |  |  |   router.get('/sitemap.xml', sitemap); | 
					
						
							|  |  |  |   router.get('/chat', chat); | 
					
						
							| 
									
										
										
										
											2015-07-31 17:30:27 -07:00
										 |  |  |   router.get('/coding-bootcamp-cost-calculator', bootcampCalculator); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   router.get('/twitch', twitch); | 
					
						
							|  |  |  |   router.get('/pmi-acp-agile-project-managers', agileProjectManagers); | 
					
						
							|  |  |  |   router.get('/pmi-acp-agile-project-managers-form', agileProjectManagersForm); | 
					
						
							|  |  |  |   router.get('/nonprofits', nonprofits); | 
					
						
							|  |  |  |   router.get('/nonprofits-form', nonprofitsForm); | 
					
						
							| 
									
										
										
										
											2015-06-25 15:15:41 -07:00
										 |  |  |   router.get('/our-sponsors', sponsors); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   router.get('/jobs-form', jobsForm); | 
					
						
							|  |  |  |   router.get('/unsubscribe/:email', unsubscribe); | 
					
						
							|  |  |  |   router.get('/unsubscribed', unsubscribed); | 
					
						
							| 
									
										
										
										
											2015-08-08 16:13:23 -07:00
										 |  |  |   router.get('/get-started', getStarted); | 
					
						
							| 
									
										
										
										
											2015-08-13 17:20:52 -07:00
										 |  |  |   router.get('/submit-cat-photo', submitCatPhoto); | 
					
						
							| 
									
										
										
										
											2015-10-06 18:19:43 -07:00
										 |  |  |   router.get('/labs', showLabs); | 
					
						
							| 
									
										
										
										
											2015-10-07 00:26:17 -07:00
										 |  |  |   router.get('/stories', showTestimonials); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:31:42 -07:00
										 |  |  |   app.use(router); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   function twitter(req, res, next) { | 
					
						
							|  |  |  |     // sends out random tweets about javascript
 | 
					
						
							|  |  |  |     var T = new Twit({ | 
					
						
							|  |  |  |       'consumer_key': secrets.twitter.consumerKey, | 
					
						
							|  |  |  |       'consumer_secret': secrets.twitter.consumerSecret, | 
					
						
							|  |  |  |       'access_token': secrets.twitter.token, | 
					
						
							|  |  |  |       'access_token_secret': secrets.twitter.tokenSecret | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var screenName; | 
					
						
							|  |  |  |     if (req.params.screenName) { | 
					
						
							|  |  |  |       screenName = req.params.screenName; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       screenName = 'freecodecamp'; | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |     T.get( | 
					
						
							|  |  |  |       'statuses/user_timeline', | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         'screen_name': screenName, | 
					
						
							|  |  |  |         count: 10 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |       function(err, data) { | 
					
						
							|  |  |  |         if (err) { return next(err); } | 
					
						
							|  |  |  |         return res.json(data); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function sitemap(req, res, next) { | 
					
						
							|  |  |  |     var appUrl = 'http://www.freecodecamp.com'; | 
					
						
							|  |  |  |     var now = moment(new Date()).format('YYYY-MM-DD'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // TODO(berks): refactor async to rx
 | 
					
						
							|  |  |  |     async.parallel({ | 
					
						
							|  |  |  |         users: function(callback) { | 
					
						
							|  |  |  |           User.find( | 
					
						
							|  |  |  |             { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |               where: { username: { nlike: '' } }, | 
					
						
							|  |  |  |               fields: { username: true } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |             }, | 
					
						
							|  |  |  |             function(err, users) { | 
					
						
							|  |  |  |               if (err) { | 
					
						
							|  |  |  |                 debug('User err: ', err); | 
					
						
							|  |  |  |                 callback(err); | 
					
						
							|  |  |  |               } else { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |                 Rx.Observable.from(users, null, null, Rx.Scheduler.default) | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |                   .map(function(user) { | 
					
						
							| 
									
										
										
										
											2015-06-04 12:54:41 -07:00
										 |  |  |                     return user.username; | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |                   }) | 
					
						
							|  |  |  |                   .toArray() | 
					
						
							|  |  |  |                   .subscribe( | 
					
						
							|  |  |  |                     function(usernames) { | 
					
						
							|  |  |  |                       callback(null, usernames); | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                     callback | 
					
						
							|  |  |  |                   ); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |         challenges: function(callback) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |           Challenge.find( | 
					
						
							|  |  |  |             { fields: { name: true } }, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |             function(err, challenges) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |               if (err) { | 
					
						
							|  |  |  |                 debug('Challenge err: ', err); | 
					
						
							|  |  |  |                 callback(err); | 
					
						
							|  |  |  |               } else { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |                 Rx.Observable.from(challenges, null, null, Rx.Scheduler.default) | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |                   .map(function(challenge) { | 
					
						
							|  |  |  |                     return challenge.name; | 
					
						
							|  |  |  |                   }) | 
					
						
							|  |  |  |                   .toArray() | 
					
						
							|  |  |  |                   .subscribe( | 
					
						
							|  |  |  |                     callback.bind(callback, null), | 
					
						
							|  |  |  |                     callback | 
					
						
							|  |  |  |                   ); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |         stories: function(callback) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |           Story.find( | 
					
						
							|  |  |  |             { field: { link: true } }, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |             function(err, stories) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |               if (err) { | 
					
						
							|  |  |  |                 debug('Story err: ', err); | 
					
						
							|  |  |  |                 callback(err); | 
					
						
							|  |  |  |               } else { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |                 Rx.Observable.from(stories, null, null, Rx.Scheduler.default) | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |                   .map(function(story) { | 
					
						
							|  |  |  |                     return story.link; | 
					
						
							|  |  |  |                   }) | 
					
						
							|  |  |  |                   .toArray() | 
					
						
							|  |  |  |                   .subscribe( | 
					
						
							|  |  |  |                     callback.bind(callback, null), | 
					
						
							|  |  |  |                     callback | 
					
						
							|  |  |  |                   ); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           ); | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |         nonprofits: function(callback) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |           Nonprofit.find( | 
					
						
							|  |  |  |             { field: { name: true } }, | 
					
						
							|  |  |  |             function(err, nonprofits) { | 
					
						
							|  |  |  |               if (err) { | 
					
						
							|  |  |  |                 debug('User err: ', err); | 
					
						
							|  |  |  |                 callback(err); | 
					
						
							|  |  |  |               } else { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |                 Rx.Observable.from(nonprofits, null, null, Rx.Scheduler.default) | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |                   .map(function(nonprofit) { | 
					
						
							|  |  |  |                     return nonprofit.name; | 
					
						
							|  |  |  |                   }) | 
					
						
							|  |  |  |                   .toArray() | 
					
						
							|  |  |  |                   .subscribe( | 
					
						
							|  |  |  |                     callback.bind(callback, null), | 
					
						
							|  |  |  |                     callback | 
					
						
							|  |  |  |                   ); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }, function(err, results) { | 
					
						
							|  |  |  |         if (err) { | 
					
						
							|  |  |  |           return next(err); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |         process.nextTick(function() { | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |           res.header('Content-Type', 'application/xml'); | 
					
						
							|  |  |  |           res.render('resources/sitemap', { | 
					
						
							|  |  |  |             appUrl: appUrl, | 
					
						
							|  |  |  |             now: now, | 
					
						
							|  |  |  |             users: results.users, | 
					
						
							|  |  |  |             challenges: results.challenges, | 
					
						
							|  |  |  |             stories: results.stories, | 
					
						
							| 
									
										
										
										
											2015-07-31 21:55:49 -07:00
										 |  |  |             nonprofits: results.nonprofits | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |           }); | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |         }); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function chat(req, res) { | 
					
						
							| 
									
										
										
										
											2015-07-31 17:30:27 -07:00
										 |  |  |     res.redirect('https://gitter.im/FreeCodeCamp/FreeCodeCamp'); | 
					
						
							| 
									
										
										
										
											2015-06-15 21:44:19 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-06 18:19:43 -07:00
										 |  |  |   function showLabs(req, res) { | 
					
						
							|  |  |  |     res.render('resources/labs', { | 
					
						
							|  |  |  |       title: 'Projects Built by Free Code Camp Students', | 
					
						
							|  |  |  |       projects: labs | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-07 00:26:17 -07:00
										 |  |  |   function showTestimonials(req, res) { | 
					
						
							| 
									
										
										
										
											2015-10-06 21:28:00 -07:00
										 |  |  |     res.render('resources/stories', { | 
					
						
							|  |  |  |       title: 'Stories from Happy Free Code Camp Campers', | 
					
						
							| 
									
										
										
										
											2015-10-07 00:26:17 -07:00
										 |  |  |       stories: testimonials | 
					
						
							| 
									
										
										
										
											2015-10-06 18:19:43 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-13 17:20:52 -07:00
										 |  |  |   function submitCatPhoto(req, res) { | 
					
						
							|  |  |  |     res.send('Submitted!'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-31 17:30:27 -07:00
										 |  |  |   function bootcampCalculator(req, res) { | 
					
						
							|  |  |  |     res.render('resources/calculator', { | 
					
						
							|  |  |  |       title: 'Coding Bootcamp Cost Calculator' | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-06-20 18:40:43 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   function jobsForm(req, res) { | 
					
						
							|  |  |  |     res.render('resources/jobs-form', { | 
					
						
							|  |  |  |       title: 'Employer Partnership Form for Job Postings,' + | 
					
						
							|  |  |  |         ' Recruitment and Corporate Sponsorships' | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-25 15:15:41 -07:00
										 |  |  |   function sponsors(req, res) { | 
					
						
							|  |  |  |     res.render('sponsors/sponsors', { | 
					
						
							|  |  |  |       title: 'The Sponsors who make Free Code Camp Possible' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   function nonprofits(req, res) { | 
					
						
							|  |  |  |     res.render('resources/nonprofits', { | 
					
						
							|  |  |  |       title: 'A guide to our Nonprofit Projects' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function nonprofitsForm(req, res) { | 
					
						
							|  |  |  |     res.render('resources/nonprofits-form', { | 
					
						
							|  |  |  |       title: 'Nonprofit Projects Proposal Form' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function agileProjectManagers(req, res) { | 
					
						
							|  |  |  |     res.render('resources/pmi-acp-agile-project-managers', { | 
					
						
							|  |  |  |       title: 'Get Agile Project Management Experience for the PMI-ACP' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function agileProjectManagersForm(req, res) { | 
					
						
							|  |  |  |     res.render('resources/pmi-acp-agile-project-managers-form', { | 
					
						
							|  |  |  |       title: 'Agile Project Management Program Application Form' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function twitch(req, res) { | 
					
						
							|  |  |  |     res.render('resources/twitch', { | 
					
						
							| 
									
										
										
										
											2015-08-13 01:20:45 -07:00
										 |  |  |       title: 'Watch us code on Twitch.tv and LiveCoding.tv' | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function unsubscribe(req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-06-20 21:15:41 -07:00
										 |  |  |     User.findOne({ where: { email: req.params.email } }, function(err, user) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |       if (user) { | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |         if (err) { | 
					
						
							|  |  |  |           return next(err); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |         user.sendMonthlyEmail = false; | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |         user.save(function() { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |           if (err) { | 
					
						
							|  |  |  |             return next(err); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           res.redirect('/unsubscribed'); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |         res.redirect('/unsubscribed'); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   function unsubscribed(req, res) { | 
					
						
							|  |  |  |     res.render('resources/unsubscribed', { | 
					
						
							|  |  |  |       title: 'You have been unsubscribed' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-08 16:13:23 -07:00
										 |  |  |   function getStarted(req, res) { | 
					
						
							|  |  |  |     res.render('resources/get-started', { | 
					
						
							|  |  |  |       title: 'How to get started with Free Code Camp' | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |   function githubCalls(req, res, next) { | 
					
						
							|  |  |  |     var githubHeaders = { | 
					
						
							|  |  |  |       headers: { | 
					
						
							|  |  |  |         'User-Agent': constantStrings.gitHubUserAgent | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |       port: 80 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     request( | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         'https://api.github.com/repos/freecodecamp/', | 
					
						
							|  |  |  |         'freecodecamp/pulls?client_id=', | 
					
						
							|  |  |  |         secrets.github.clientID, | 
					
						
							|  |  |  |         '&client_secret=', | 
					
						
							|  |  |  |         secrets.github.clientSecret | 
					
						
							|  |  |  |       ].join(''), | 
					
						
							|  |  |  |       githubHeaders, | 
					
						
							|  |  |  |       function(err, status1, pulls) { | 
					
						
							|  |  |  |         if (err) { return next(err); } | 
					
						
							|  |  |  |         pulls = pulls ? | 
					
						
							|  |  |  |           Object.keys(JSON.parse(pulls)).length : | 
					
						
							|  |  |  |           'Can\'t connect to github'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         request( | 
					
						
							|  |  |  |           [ | 
					
						
							|  |  |  |             'https://api.github.com/repos/freecodecamp/', | 
					
						
							|  |  |  |             'freecodecamp/issues?client_id=', | 
					
						
							|  |  |  |             secrets.github.clientID, | 
					
						
							|  |  |  |             '&client_secret=', | 
					
						
							|  |  |  |             secrets.github.clientSecret | 
					
						
							|  |  |  |           ].join(''), | 
					
						
							|  |  |  |           githubHeaders, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |           function(err, status2, issues) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |             if (err) { return next(err); } | 
					
						
							|  |  |  |             issues = ((pulls === parseInt(pulls, 10)) && issues) ? | 
					
						
							|  |  |  |             Object.keys(JSON.parse(issues)).length - pulls : | 
					
						
							|  |  |  |               "Can't connect to GitHub"; | 
					
						
							|  |  |  |             res.send({ | 
					
						
							|  |  |  |               issues: issues, | 
					
						
							|  |  |  |               pulls: pulls | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function trelloCalls(req, res, next) { | 
					
						
							|  |  |  |     request( | 
					
						
							|  |  |  |       'https://trello.com/1/boards/BA3xVpz9/cards?key=' + | 
					
						
							|  |  |  |       secrets.trello.key, | 
					
						
							|  |  |  |       function(err, status, trello) { | 
					
						
							|  |  |  |         if (err) { return next(err); } | 
					
						
							|  |  |  |         trello = (status && status.statusCode === 200) ? | 
					
						
							|  |  |  |           (JSON.parse(trello)) : | 
					
						
							|  |  |  |           'Can\'t connect to to Trello'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res.end(JSON.stringify(trello)); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function bloggerCalls(req, res, next) { | 
					
						
							|  |  |  |     request( | 
					
						
							|  |  |  |       'https://www.googleapis.com/blogger/v3/blogs/2421288658305323950/' + | 
					
						
							|  |  |  |         'posts?key=' + | 
					
						
							|  |  |  |       secrets.blogger.key, | 
					
						
							| 
									
										
										
										
											2015-10-07 00:28:42 -07:00
										 |  |  |       function(err, status, blog) { | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |         if (err) { return next(err); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         blog = (status && status.statusCode === 200) ? | 
					
						
							|  |  |  |           JSON.parse(blog) : | 
					
						
							|  |  |  |           'Can\'t connect to Blogger'; | 
					
						
							|  |  |  |         res.end(JSON.stringify(blog)); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:30:43 -04:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2015-06-03 16:19:23 -07:00
										 |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; |