2016-04-07 20:00:51 +00:00
|
|
|
import request from 'request';
|
2018-06-28 22:04:11 +00:00
|
|
|
|
2018-09-06 13:59:52 +00:00
|
|
|
import { homeLocation } from '../../../config/env';
|
|
|
|
|
2016-04-07 20:00:51 +00:00
|
|
|
import constantStrings from '../utils/constantStrings.json';
|
2016-06-24 03:05:30 +00:00
|
|
|
|
|
|
|
const githubClient = process.env.GITHUB_ID;
|
|
|
|
const githubSecret = process.env.GITHUB_SECRET;
|
2015-06-01 23:48:16 +00:00
|
|
|
|
2015-06-03 23:19:23 +00:00
|
|
|
module.exports = function(app) {
|
2016-04-07 20:00:51 +00:00
|
|
|
const router = app.loopback.Router();
|
2018-09-06 13:59:52 +00:00
|
|
|
const api = app.loopback.Router();
|
2016-04-07 20:00:51 +00:00
|
|
|
const User = app.models.User;
|
2018-05-15 05:12:05 +00:00
|
|
|
|
|
|
|
router.get('/api/github', githubCalls);
|
2018-09-06 13:59:52 +00:00
|
|
|
router.get('/u/:email', unsubscribeDepricated);
|
|
|
|
router.get('/unsubscribe/:email', unsubscribeDepricated);
|
2018-08-02 10:34:35 +00:00
|
|
|
router.get('/ue/:unsubscribeId', unsubscribeById);
|
2018-05-15 05:12:05 +00:00
|
|
|
router.get(
|
2016-06-17 19:35:10 +00:00
|
|
|
'/the-fastest-web-page-on-the-internet',
|
|
|
|
theFastestWebPageOnTheInternet
|
|
|
|
);
|
2018-08-02 10:34:35 +00:00
|
|
|
router.get('/unsubscribed/:unsubscribeId', unsubscribedWithId);
|
2016-06-17 19:35:10 +00:00
|
|
|
router.get('/unsubscribed', unsubscribed);
|
2018-09-06 13:59:52 +00:00
|
|
|
api.get('/resubscribe/:unsubscribeId', resubscribe);
|
2015-06-03 23:19:23 +00:00
|
|
|
router.get('/nonprofits', nonprofits);
|
2016-06-17 19:35:10 +00:00
|
|
|
router.get('/coding-bootcamp-cost-calculator', bootcampCalculator);
|
2015-06-03 23:19:23 +00:00
|
|
|
|
2018-05-15 05:12:05 +00:00
|
|
|
app.use(router);
|
2015-06-03 23:31:42 +00:00
|
|
|
|
2018-09-06 13:59:52 +00:00
|
|
|
app.use('/internal', api);
|
|
|
|
|
2015-11-25 16:23:35 +00:00
|
|
|
function theFastestWebPageOnTheInternet(req, res) {
|
|
|
|
res.render('resources/the-fastest-web-page-on-the-internet', {
|
|
|
|
title: 'This is the fastest web page on the internet'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-08-01 00:30:27 +00:00
|
|
|
function bootcampCalculator(req, res) {
|
|
|
|
res.render('resources/calculator', {
|
|
|
|
title: 'Coding Bootcamp Cost Calculator'
|
|
|
|
});
|
2015-06-21 01:40:43 +00:00
|
|
|
}
|
|
|
|
|
2015-06-03 23:19:23 +00:00
|
|
|
function nonprofits(req, res) {
|
|
|
|
res.render('resources/nonprofits', {
|
2015-10-31 09:59:09 +00:00
|
|
|
title: 'Your Nonprofit Can Get Pro Bono Code'
|
2015-06-03 23:19:23 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-09-06 13:59:52 +00:00
|
|
|
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);
|
2015-06-03 23:19:23 +00:00
|
|
|
}
|
2015-06-01 22:30:43 +00:00
|
|
|
|
2018-08-02 10:34:35 +00:00
|
|
|
function unsubscribeById(req, res, next) {
|
|
|
|
const { unsubscribeId } = req.params;
|
2018-08-07 13:31:26 +00:00
|
|
|
if (!unsubscribeId) {
|
2018-09-06 13:59:52 +00:00
|
|
|
req.flash('info', 'We could not find an account to unsubscribe');
|
|
|
|
return res.redirectWithFlash(homeLocation);
|
2018-08-07 13:31:26 +00:00
|
|
|
}
|
2018-08-02 10:34:35 +00:00
|
|
|
return User.find({ where: { unsubscribeId } }, (err, users) => {
|
|
|
|
if (err || !users.length) {
|
2018-09-06 13:59:52 +00:00
|
|
|
req.flash('info', 'We could not find an account to unsubscribe');
|
|
|
|
return res.redirectWithFlash(homeLocation);
|
2018-08-02 10:34:35 +00:00
|
|
|
}
|
2018-08-07 13:31:26 +00:00
|
|
|
const updates = users.map(user => {
|
|
|
|
return new Promise((resolve, reject) =>
|
2018-09-06 13:59:52 +00:00
|
|
|
user.updateAttributes(
|
|
|
|
{
|
|
|
|
sendQuincyEmail: false
|
|
|
|
},
|
|
|
|
err => {
|
|
|
|
if (err) {
|
|
|
|
reject(err);
|
|
|
|
} else {
|
|
|
|
resolve();
|
|
|
|
}
|
2018-08-07 13:31:26 +00:00
|
|
|
}
|
2018-09-06 13:59:52 +00:00
|
|
|
)
|
2018-08-07 13:31:26 +00:00
|
|
|
);
|
|
|
|
});
|
|
|
|
return Promise.all(updates)
|
|
|
|
.then(() => {
|
2018-09-06 13:59:52 +00:00
|
|
|
req.flash(
|
|
|
|
'success',
|
|
|
|
"We've successfully updated your email preferences."
|
|
|
|
);
|
|
|
|
return res.redirectWithFlash(
|
|
|
|
`${homeLocation}/unsubscribed/${unsubscribeId}`
|
|
|
|
);
|
2018-08-07 13:31:26 +00:00
|
|
|
})
|
|
|
|
.catch(next);
|
2018-08-02 10:34:35 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-06-03 23:19:23 +00:00
|
|
|
function unsubscribed(req, res) {
|
|
|
|
res.render('resources/unsubscribed', {
|
|
|
|
title: 'You have been unsubscribed'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-08-02 10:34:35 +00:00
|
|
|
function unsubscribedWithId(req, res) {
|
|
|
|
const { unsubscribeId } = req.params;
|
|
|
|
return res.render('resources/unsubscribed', {
|
|
|
|
title: 'You have been unsubscribed',
|
|
|
|
unsubscribeId
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function resubscribe(req, res, next) {
|
2018-08-02 19:58:49 +00:00
|
|
|
const { unsubscribeId } = req.params;
|
2018-09-06 13:59:52 +00:00
|
|
|
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(
|
|
|
|
{
|
2018-08-02 10:34:35 +00:00
|
|
|
sendQuincyEmail: true
|
2018-09-06 13:59:52 +00:00
|
|
|
},
|
|
|
|
err => {
|
2018-08-02 10:34:35 +00:00
|
|
|
if (err) {
|
|
|
|
reject(err);
|
|
|
|
} else {
|
|
|
|
resolve();
|
|
|
|
}
|
2018-09-06 13:59:52 +00:00
|
|
|
}
|
2018-08-02 10:34:35 +00:00
|
|
|
)
|
2018-09-06 13:59:52 +00:00
|
|
|
)
|
2018-08-02 10:34:35 +00:00
|
|
|
.then(() => {
|
2018-09-06 13:59:52 +00:00
|
|
|
req.flash(
|
|
|
|
'success',
|
|
|
|
"We've successfully updated your email preferences. Thank you " +
|
|
|
|
'for resubscribing.'
|
|
|
|
);
|
|
|
|
return res.redirectWithFlash(homeLocation);
|
2018-08-02 10:34:35 +00:00
|
|
|
})
|
|
|
|
.catch(next);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-06-03 23:19:23 +00:00
|
|
|
function githubCalls(req, res, next) {
|
|
|
|
var githubHeaders = {
|
|
|
|
headers: {
|
|
|
|
'User-Agent': constantStrings.gitHubUserAgent
|
2015-06-01 22:30:43 +00:00
|
|
|
},
|
2015-06-03 23:19:23 +00:00
|
|
|
port: 80
|
|
|
|
};
|
|
|
|
request(
|
|
|
|
[
|
|
|
|
'https://api.github.com/repos/freecodecamp/',
|
|
|
|
'freecodecamp/pulls?client_id=',
|
2016-06-24 03:05:30 +00:00
|
|
|
githubClient,
|
2015-06-03 23:19:23 +00:00
|
|
|
'&client_secret=',
|
2016-06-24 03:05:30 +00:00
|
|
|
githubSecret
|
2015-06-03 23:19:23 +00:00
|
|
|
].join(''),
|
|
|
|
githubHeaders,
|
|
|
|
function(err, status1, pulls) {
|
2018-09-06 13:59:52 +00:00
|
|
|
if (err) {
|
|
|
|
return next(err);
|
|
|
|
}
|
|
|
|
pulls = pulls
|
|
|
|
? Object.keys(JSON.parse(pulls)).length
|
|
|
|
: "Can't connect to github";
|
2015-06-03 23:19:23 +00:00
|
|
|
|
2016-03-03 04:54:14 +00:00
|
|
|
return request(
|
2015-06-03 23:19:23 +00:00
|
|
|
[
|
|
|
|
'https://api.github.com/repos/freecodecamp/',
|
|
|
|
'freecodecamp/issues?client_id=',
|
2016-06-24 03:05:30 +00:00
|
|
|
githubClient,
|
2015-06-03 23:19:23 +00:00
|
|
|
'&client_secret=',
|
2016-06-24 03:05:30 +00:00
|
|
|
githubSecret
|
2015-06-03 23:19:23 +00:00
|
|
|
].join(''),
|
|
|
|
githubHeaders,
|
2015-10-07 07:28:42 +00:00
|
|
|
function(err, status2, issues) {
|
2018-09-06 13:59:52 +00:00
|
|
|
if (err) {
|
|
|
|
return next(err);
|
|
|
|
}
|
|
|
|
issues =
|
|
|
|
pulls === parseInt(pulls, 10) && issues
|
|
|
|
? Object.keys(JSON.parse(issues)).length - pulls
|
|
|
|
: "Can't connect to GitHub";
|
2016-03-03 04:54:14 +00:00
|
|
|
return res.send({
|
2015-06-03 23:19:23 +00:00
|
|
|
issues: issues,
|
|
|
|
pulls: pulls
|
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
};
|