import request from 'request'; import { homeLocation } from '../../../config/env'; import constantStrings from '../utils/constantStrings.json'; const githubClient = process.env.GITHUB_ID; const githubSecret = process.env.GITHUB_SECRET; module.exports = function(app) { const router = app.loopback.Router(); const api = app.loopback.Router(); const User = app.models.User; router.get('/api/github', githubCalls); router.get('/u/:email', unsubscribeDepricated); router.get('/unsubscribe/:email', unsubscribeDepricated); router.get('/ue/:unsubscribeId', unsubscribeById); router.get( '/the-fastest-web-page-on-the-internet', theFastestWebPageOnTheInternet ); router.get('/unsubscribed/:unsubscribeId', unsubscribedWithId); router.get('/unsubscribed', unsubscribed); api.get('/resubscribe/:unsubscribeId', resubscribe); router.get('/nonprofits', nonprofits); router.get('/coding-bootcamp-cost-calculator', bootcampCalculator); app.use(router); app.use('/internal', api); function theFastestWebPageOnTheInternet(req, res) { res.render('resources/the-fastest-web-page-on-the-internet', { title: 'This is the fastest web page on the internet' }); } function bootcampCalculator(req, res) { res.render('resources/calculator', { title: 'Coding Bootcamp Cost Calculator' }); } function nonprofits(req, res) { res.render('resources/nonprofits', { title: 'Your Nonprofit Can Get Pro Bono Code' }); } function unsubscribeDepricated(req, res) { req.flash( 'info', 'We are no longer able to process this unsubscription request. ' + 'Please go to your settings to update your email preferences' ); res.redirectWithFlash(homeLocation); } function unsubscribeById(req, res, next) { const { unsubscribeId } = req.params; if (!unsubscribeId) { req.flash('info', 'We could not find an account to unsubscribe'); return res.redirectWithFlash(homeLocation); } return User.find({ where: { unsubscribeId } }, (err, users) => { if (err || !users.length) { req.flash('info', 'We could not find an account to unsubscribe'); return res.redirectWithFlash(homeLocation); } const updates = users.map(user => { return new Promise((resolve, reject) => user.updateAttributes( { sendQuincyEmail: false }, err => { if (err) { reject(err); } else { resolve(); } } ) ); }); return Promise.all(updates) .then(() => { req.flash( 'success', "We've successfully updated your email preferences." ); return res.redirectWithFlash( `${homeLocation}/unsubscribed/${unsubscribeId}` ); }) .catch(next); }); } function unsubscribed(req, res) { res.render('resources/unsubscribed', { title: 'You have been unsubscribed' }); } function unsubscribedWithId(req, res) { const { unsubscribeId } = req.params; return res.render('resources/unsubscribed', { title: 'You have been unsubscribed', unsubscribeId }); } function resubscribe(req, res, next) { const { unsubscribeId } = req.params; if (!unsubscribeId) { req.flash( 'info', 'We we unable to process this request, please check and try againÍ' ); res.redirect(homeLocation); } return User.find({ where: { unsubscribeId } }, (err, users) => { if (err || !users.length) { req.flash('info', 'We could not find an account to resubscribe'); return res.redirectWithFlash(homeLocation); } const [user] = users; return new Promise((resolve, reject) => user.updateAttributes( { sendQuincyEmail: true }, err => { if (err) { reject(err); } else { resolve(); } } ) ) .then(() => { req.flash( 'success', "We've successfully updated your email preferences. Thank you " + 'for resubscribing.' ); return res.redirectWithFlash(homeLocation); }) .catch(next); }); } function githubCalls(req, res, next) { var githubHeaders = { headers: { 'User-Agent': constantStrings.gitHubUserAgent }, port: 80 }; request( [ 'https://api.github.com/repos/freecodecamp/', 'freecodecamp/pulls?client_id=', githubClient, '&client_secret=', githubSecret ].join(''), githubHeaders, function(err, status1, pulls) { if (err) { return next(err); } pulls = pulls ? Object.keys(JSON.parse(pulls)).length : "Can't connect to github"; return request( [ 'https://api.github.com/repos/freecodecamp/', 'freecodecamp/issues?client_id=', githubClient, '&client_secret=', githubSecret ].join(''), githubHeaders, function(err, status2, issues) { if (err) { return next(err); } issues = pulls === parseInt(pulls, 10) && issues ? Object.keys(JSON.parse(issues)).length - pulls : "Can't connect to GitHub"; return res.send({ issues: issues, pulls: pulls }); } ); } ); } };