fix all the linting errors in boot

This commit is contained in:
Berkeley Martinez
2015-06-01 16:23:53 -07:00
parent d9c3251f94
commit 7c2f171d31
11 changed files with 156 additions and 170 deletions

View File

@ -147,12 +147,14 @@ exports.returnCurrentChallenge = function(req, res, next) {
exports.returnIndividualChallenge = function(req, res, next) { exports.returnIndividualChallenge = function(req, res, next) {
var dashedName = req.params.challengeName; var dashedName = req.params.challengeName;
var challengeName = /^(bonfire|waypoint|zipline|basejump)/i.test(dashedName) ? dashedName var challengeName =
(/^(bonfire|waypoint|zipline|basejump)/i).test(dashedName) ?
dashedName
.replace(/\-/g, ' ') .replace(/\-/g, ' ')
.split(' ') .split(' ')
.slice(1) .slice(1)
.join(' ') .join(' ') :
: dashedName.replace(/\-/g, ' '); dashedName.replace(/\-/g, ' ');
Challenge.find({'name': new RegExp(challengeName, 'i')}, Challenge.find({'name': new RegExp(challengeName, 'i')},
function(err, challengeFromMongo) { function(err, challengeFromMongo) {
@ -175,8 +177,7 @@ exports.returnIndividualChallenge = function(req, res, next) {
.replace(/[^a-z0-9\-\.]/gi, ''); .replace(/[^a-z0-9\-\.]/gi, '');
if (dashedNameFull !== dashedName) { if (dashedNameFull !== dashedName) {
return res.redirect('../challenges/' + dashedNameFull); return res.redirect('../challenges/' + dashedNameFull);
} else { } else if (req.user) {
if (req.user) {
req.user.currentChallenge = { req.user.currentChallenge = {
challengeId: challenge._id, challengeId: challenge._id,
challengeName: challenge.name, challengeName: challenge.name,
@ -192,7 +193,6 @@ exports.returnIndividualChallenge = function(req, res, next) {
)) ))
}; };
} }
}
var challengeType = { var challengeType = {
0: function() { 0: function() {
@ -379,14 +379,12 @@ exports.completedBonfire = function (req, res, next) {
return next(err); return next(err);
} }
if (user && paired) { if (user && paired) {
res.send(true); return res.send(true);
} }
}); });
} else { } else if (user) {
if (user) {
res.send(true); res.send(true);
} }
}
}); });
} }
}); });

View File

@ -1,5 +1,5 @@
var R = require('ramda'), var R = require('ramda'),
debug = require('debug')('freecc:cntr:challengeMap'), //eslint-disable-line // debug = require('debug')('freecc:cntr:challengeMap'),
User = require('../../models/User'), User = require('../../models/User'),
resources = require('./../resources/resources'), resources = require('./../resources/resources'),
middleware = require('../resources/middleware'), middleware = require('../resources/middleware'),
@ -19,8 +19,6 @@ router.get('/about', function(req, res) {
res.redirect(301, '/map'); res.redirect(301, '/map');
}); });
function challengeMap(req, res, next) { function challengeMap(req, res, next) {
var completedList = []; var completedList = [];

View File

@ -1,7 +1,7 @@
var R = require('ramda'), var R = require('ramda'),
// debug = require('debug')('freecc:fieldguides'),
FieldGuide = require('./../../models/FieldGuide'), FieldGuide = require('./../../models/FieldGuide'),
resources = require('./../resources/resources'), resources = require('./../resources/resources');
debug = require('debug')('freecc:fieldguides');
exports.returnIndividualFieldGuide = function(req, res, next) { exports.returnIndividualFieldGuide = function(req, res, next) {
var dashedName = req.params.fieldGuideName; var dashedName = req.params.fieldGuideName;

View File

@ -5,8 +5,6 @@ var router = express.Router();
router.get('/', index); router.get('/', index);
function index(req, res, next) { function index(req, res, next) {
if (req.user && !req.user.profile.picture) { if (req.user && !req.user.profile.picture) {
req.user.profile.picture = req.user.profile.picture =

View File

@ -1,6 +1,4 @@
var moment = require('moment'), var Job = require('./../../models/Job');
Job = require('./../../models/Job'),
resources = require('./../resources/resources');
exports.jobsDirectory = function(req, res, next) { exports.jobsDirectory = function(req, res, next) {
Job.find({}, function(err, jobs) { Job.find({}, function(err, jobs) {

View File

@ -1,8 +1,12 @@
var moment = require('moment'), var express = require('express'),
Nonprofit = require('./../../models/Nonprofit'), Nonprofit = require('./../../models/Nonprofit');
resources = require('./../resources/resources');
exports.nonprofitsDirectory = function(req, res, next) { var router = express.Router();
router.get('/nonprofits/directory', nonprofitsDirectory);
router.get('/nonprofits/:nonprofitName', returnIndividualNonprofit);
function nonprofitsDirectory(req, res, next) {
Nonprofit.find({ estimatedHours: { $gt: 0 } }, function(err, nonprofits) { Nonprofit.find({ estimatedHours: { $gt: 0 } }, function(err, nonprofits) {
if (err) { return next(err); } if (err) { return next(err); }
@ -11,9 +15,9 @@ exports.nonprofitsDirectory = function(req, res, next) {
nonprofits: nonprofits nonprofits: nonprofits
}); });
}); });
}; }
exports.returnIndividualNonprofit = function(req, res, next) { function returnIndividualNonprofit(req, res, next) {
var dashedName = req.params.nonprofitName; var dashedName = req.params.nonprofitName;
var nonprofitName = dashedName.replace(/\-/g, ' '); var nonprofitName = dashedName.replace(/\-/g, ' ');
@ -91,9 +95,10 @@ exports.returnIndividualNonprofit = function(req, res, next) {
}); });
} }
); );
}; }
exports.interestedInNonprofit = function(req, res, next) { /*
function interestedInNonprofit(req, res, next) {
if (req.user) { if (req.user) {
Nonprofit.findOne( Nonprofit.findOne(
{ name: new RegExp(req.params.nonprofitName.replace(/-/, ' '), 'i') }, { name: new RegExp(req.params.nonprofitName.replace(/-/, ' '), 'i') },
@ -115,4 +120,7 @@ exports.interestedInNonprofit = function(req, res, next) {
} }
); );
} }
}; }
*/
module.exports = router;

View File

@ -1,9 +1,11 @@
var express = require('express'); var express = require('express');
var router = express.Router(); var router = express.Router();
router.get('/nonprofit-project-instructions', function(req, res) { router.get('/nonprofit-project-instructions', function(req, res) {
res.redirect(301, '/field-guide/how-do-free-code-camp\'s-nonprofit-projects-work'); res.redirect(
301,
'/field-guide/how-do-free-code-camp\'s-nonprofit-projects-work'
);
}); });
router.get('/agile', function(req, res) { router.get('/agile', function(req, res) {

View File

@ -1,17 +1,15 @@
/* eslint-disable no-catch-shadow, no-unused-vars */ var nodemailer = require('nodemailer'),
var R = require('ramda'), sanitizeHtml = require('sanitize-html'),
debug = require('debug')('freecc:cntr:story'), express = require('express'),
moment = require('moment'),
// debug = require('debug')('freecc:cntr:story'),
Story = require('./../../models/Story'), Story = require('./../../models/Story'),
Comment = require('./../../models/Comment'), Comment = require('./../../models/Comment'),
User = require('./../../models/User'), User = require('./../../models/User'),
moment = require('moment'),
resources = require('./../resources/resources'), resources = require('./../resources/resources'),
mongodb = require('mongodb'), mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient, MongoClient = mongodb.MongoClient,
secrets = require('../../config/secrets'), secrets = require('../../config/secrets'),
nodemailer = require('nodemailer'),
sanitizeHtml = require('sanitize-html'),
express = require('express'),
router = express.Router(); router = express.Router();
router.get('/stories/hotStories', hotJSON); router.get('/stories/hotStories', hotJSON);
@ -88,6 +86,8 @@ function submitNew(req, res) {
}); });
} }
/*
* no used anywhere
function search(req, res) { function search(req, res) {
return res.render('stories/index', { return res.render('stories/index', {
title: 'Search the archives of Camper News', title: 'Search the archives of Camper News',
@ -101,6 +101,7 @@ function recent(req, res) {
page: 'recent' page: 'recent'
}); });
} }
*/
function preSubmit(req, res) { function preSubmit(req, res) {
@ -250,16 +251,16 @@ function upvote(req, res, next) {
); );
story.markModified('rank'); story.markModified('rank');
story.save(); story.save();
// NOTE(Berks): This logic is full of wholes and race conditions
// this could be the source of many 'can't set headers after they are sent'
// errors. This needs cleaning
User.findOne({'_id': story.author.userId}, function(err, user) { User.findOne({'_id': story.author.userId}, function(err, user) {
if (err) { if (err) { return next(err); }
return next(err);
}
user.progressTimestamps.push(Date.now() || 0); user.progressTimestamps.push(Date.now() || 0);
user.save(function (err, user) { user.save(function (err) {
req.user.save(function (err, user) { req.user.save(function (err) {
if (err) { if (err) { return next(err); }
return next(err);
}
}); });
req.user.progressTimestamps.push(Date.now() || 0); req.user.progressTimestamps.push(Date.now() || 0);
if (err) { if (err) {
@ -351,13 +352,18 @@ function storySubmission(req, res, next) {
.replace(/\s+/g, ' ') .replace(/\s+/g, ' ')
.toLowerCase() .toLowerCase()
.trim(); .trim();
var link = data.link; var link = data.link;
if (link.search(/^https?:\/\//g) === -1) { if (link.search(/^https?:\/\//g) === -1) {
link = 'http://' + link; link = 'http://' + link;
} }
Story.count({ storyLink: new RegExp('^' + storyLink + '(?: [0-9]+)?$', 'i')}, function (err, storyCount) {
Story.count({
storyLink: new RegExp('^' + storyLink + '(?: [0-9]+)?$', 'i')
}, function (err, storyCount) {
if (err) { if (err) {
return res.status(500); return next(err);
} }
// if duplicate storyLink add unique number // if duplicate storyLink add unique number
@ -397,19 +403,19 @@ function storySubmission(req, res, next) {
}); });
story.save(function (err) { story.save(function (err) {
if (err) { if (err) {
return res.status(500); return next(err);
} }
req.user.progressTimestamps.push(Date.now() || 0); req.user.progressTimestamps.push(Date.now() || 0);
req.user.save(function (err, user) { req.user.save(function (err) {
if (err) { if (err) {
return next(err); return next(err);
} }
});
res.send(JSON.stringify({ res.send(JSON.stringify({
storyLink: story.storyLink.replace(/\s+/g, '-').toLowerCase() storyLink: story.storyLink.replace(/\s+/g, '-').toLowerCase()
})); }));
}); });
}); });
});
} }
function commentSubmit(req, res, next) { function commentSubmit(req, res, next) {
@ -531,7 +537,9 @@ function commentSave(comment, Context, res, next) {
try { try {
// Based on the context retrieve the parent // Based on the context retrieve the parent
// object of the comment (Story/Comment) // object of the comment (Story/Comment)
Context.find({'_id': data.associatedPost}, function (err, associatedContext) { Context.find({
'_id': data.associatedPost
}, function (err, associatedContext) {
if (err) { if (err) {
return next(err); return next(err);
} }
@ -546,7 +554,9 @@ function commentSave(comment, Context, res, next) {
}); });
} }
// Find the author of the parent object // Find the author of the parent object
User.findOne({'profile.username': associatedContext.author.username}, function(err, recipient) { User.findOne({
'profile.username': associatedContext.author.username
}, function(err, recipient) {
if (err) { if (err) {
return next(err); return next(err);
} }

View File

@ -37,7 +37,8 @@ router.post('/account/password', postUpdatePassword);
router.post('/account/delete', postDeleteAccount); router.post('/account/delete', postDeleteAccount);
router.get('/account/unlink/:provider', getOauthUnlink); router.get('/account/unlink/:provider', getOauthUnlink);
router.get('/account', getAccount); router.get('/account', getAccount);
router.get('/:username', returnUser); // Ensure this is the last route! // Ensure this is the last route!
router.get('/:username', returnUser);
/** /**
* GET /signin * GET /signin
@ -273,6 +274,7 @@ function checkUniqueUsername (req, res, next) {
/** /**
* Existing username check * Existing username check
*/ */
function checkExistingUsername (req, res, next) { function checkExistingUsername (req, res, next) {
User.count( User.count(
{ 'profile.username': req.params.username.toLowerCase() }, { 'profile.username': req.params.username.toLowerCase() },
@ -748,7 +750,8 @@ function postForgot (req, res, next) {
} }
user.resetPasswordToken = token; user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour // 3600000 = 1 hour
user.resetPasswordExpires = Date.now() + 3600000;
user.save(function(err) { user.save(function(err) {
if (err) { return done(err); } if (err) { return done(err); }

View File

@ -151,13 +151,22 @@ function getPair(req, res) {
var userName = req.user.profile.username; var userName = req.user.profile.username;
var challenge = req.body.payload.challenge; var challenge = req.body.payload.challenge;
slack.send({ slack.send({
text: 'Anyone want to pair with *@' + userName + '* on ' + challenge + text: [
'?\nMake sure you install Screen Hero here: ' + 'Anyone want to pair with *@',
'http://freecodecamp.com/field-guide/how-do-i-install-screenhero\n' + userName,
'Then start your pair program session with *@' + userName + '* on ',
'* by typing \"/hero @' + userName + '\" into Slack.\n And *@'+ userName + challenge,
'*, be sure to launch Screen Hero, then keep coding. ' + '?\nMake sure you install Screen Hero here: ',
'Another camper may pair with you soon.', 'http://freecodecamp.com/field-guide/how-do-i-install-screenhero\n',
'Then start your pair program session with *@',
userName,
'* by typing \"/hero @',
userName,
'\" into Slack.\n And *@',
userName,
'*, be sure to launch Screen Hero, then keep coding. ',
'Another camper may pair with you soon.'
].join(''),
channel: '#letspair', channel: '#letspair',
username: 'Companion Cube', username: 'Companion Cube',
'icon_url': 'https://lh3.googleusercontent.com/-f6xDPDV2rPE/AAAAAAAAAAI/' + 'icon_url': 'https://lh3.googleusercontent.com/-f6xDPDV2rPE/AAAAAAAAAAI/' +

View File

@ -6,9 +6,7 @@ process.on('uncaughtException', function (err) {
err.message err.message
); );
console.error(err.stack); console.error(err.stack);
/* eslint-disable no-process-exit */ process.exit(1); // eslint-disable-line
process.exit(1);
/* eslint-enable no-process-exit */
}); });
var express = require('express'), var express = require('express'),
@ -21,32 +19,29 @@ var express = require('express'),
methodOverride = require('method-override'), methodOverride = require('method-override'),
bodyParser = require('body-parser'), bodyParser = require('body-parser'),
helmet = require('helmet'), helmet = require('helmet'),
//frameguard = require('frameguard'),
//csp = require('helmet-csp'),
MongoStore = require('connect-mongo')(session), MongoStore = require('connect-mongo')(session),
flash = require('express-flash'), flash = require('express-flash'),
path = require('path'), path = require('path'),
mongoose = require('mongoose'), mongoose = require('mongoose'),
passport = require('passport'), passport = require('passport'),
expressValidator = require('express-validator'), expressValidator = require('express-validator'),
request = require('request'), // request = require('request'),
forceDomain = require('forcedomain'), forceDomain = require('forcedomain'),
lessMiddleware = require('less-middleware'), lessMiddleware = require('less-middleware'),
/** /**
* Controllers (route handlers). * routers.
*/ */
homeController = require('./boot/home'), homeRouter = require('./boot/home'),
resourcesController = require('./resources/resources'), resourcesRouter = require('./resources/resources'),
userController = require('./boot/user'), userRouter = require('./boot/user'),
nonprofitController = require('./boot/nonprofits'), fieldGuideRouter = require('./boot/fieldGuide'),
fieldGuideController = require('./boot/fieldGuide'), challengeMapRouter = require('./boot/challengeMap'),
challengeMapController = require('./boot/challengeMap'), challengeRouter = require('./boot/challenge'),
challengeController = require('./boot/challenge'), jobsRouter = require('./boot/jobs'),
jobsController = require('./boot/jobs'), redirectsRouter = require('./boot/redirects'),
redirects = require('./boot/redirects'), utilityRouter = require('./boot/utility'),
utility = require('./boot/utility'), storyRouter = require('./boot/story'),
storyController = require('./boot/story'),
/** /**
* API keys and Passport configuration. * API keys and Passport configuration.
@ -85,7 +80,7 @@ if (process.env.NODE_ENV === 'production') {
} }
app.use(compress()); app.use(compress());
app.use(lessMiddleware(__dirname + '/public')); app.use(lessMiddleware(path.join(__dirname, '/public')));
app.use(logger('dev')); app.use(logger('dev'));
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true }));
@ -189,9 +184,12 @@ app.use(helmet.csp({
'*.twitter.com', '*.twitter.com',
'*.ghbtns.com' '*.ghbtns.com'
].concat(trusted), ].concat(trusted),
reportOnly: false, // set to true if you only want to report errors // set to true if you only want to report errors
setAllHeaders: false, // set to true if you want to set all headers reportOnly: false,
safari5: false // set to true if you want to force buggy CSP in Safari 5 // set to true if you want to set all headers
setAllHeaders: false,
// set to true if you want to force buggy CSP in Safari 5
safari5: false
})); }));
app.use(function (req, res, next) { app.use(function (req, res, next) {
@ -200,7 +198,9 @@ app.use(function (req, res, next) {
next(); next();
}); });
app.use(express.static(__dirname + '/public', {maxAge: 86400000 })); app.use(
express.static(path.join(__dirname, '/public'), { maxAge: 86400000 })
);
app.use(function (req, res, next) { app.use(function (req, res, next) {
// Remember original destination before login. // Remember original destination before login.
@ -214,89 +214,50 @@ app.use(function (req, res, next) {
next(); next();
}); });
// add sub routers
app.use(homeRouter);
app.use(resourcesRouter);
app.use(userRouter);
app.use(fieldGuideRouter);
app.use(challengeMapRouter);
app.use(challengeRouter);
app.use(jobsRouter);
app.use(redirectsRouter);
app.use(utilityRouter);
app.use(storyRouter);
/*
/**
* Nonprofit Project routes.
*/
app.get('/nonprofits/directory', nonprofitController.nonprofitsDirectory);
app.get(
'/nonprofits/:nonprofitName',
nonprofitController.returnIndividualNonprofit
);
app.get( app.get(
'/jobs', '/jobs',
jobsController.jobsDirectory jobsController.jobsDirectory
); );
/**
* Camper News routes.
*/
app.all('/account', passportConf.isAuthenticated); app.all('/account', passportConf.isAuthenticated);
/**
* API routes
*/
/**
* Field Guide related routes
*/
app.get('/field-guide/all-articles', fieldGuideController.showAllFieldGuides); app.get('/field-guide/all-articles', fieldGuideController.showAllFieldGuides);
app.get('/field-guide/:fieldGuideName', app.get('/field-guide/:fieldGuideName',
fieldGuideController.returnIndividualFieldGuide fieldGuideController.returnIndividualFieldGuide
); );
app.get('/field-guide/', fieldGuideController.returnNextFieldGuide); app.get('/field-guide/', fieldGuideController.returnNextFieldGuide);
app.post('/completed-field-guide/', fieldGuideController.completedFieldGuide); app.post('/completed-field-guide/', fieldGuideController.completedFieldGuide);
/**
* Challenge related routes
*/
app.get('/challenges/next-challenge', app.get('/challenges/next-challenge',
userController.userMigration, userController.userMigration,
challengeController.returnNextChallenge challengeController.returnNextChallenge
); );
app.get( app.get(
'/challenges/:challengeName', '/challenges/:challengeName',
userController.userMigration, userController.userMigration,
challengeController.returnIndividualChallenge challengeController.returnIndividualChallenge
); );
app.get('/challenges/', app.get('/challenges/',
userController.userMigration, userController.userMigration,
challengeController.returnCurrentChallenge); challengeController.returnCurrentChallenge);
// todo refactor these routes // todo refactor these routes
app.post('/completed-challenge/', challengeController.completedChallenge); app.post('/completed-challenge/', challengeController.completedChallenge);
app.post('/completed-zipline-or-basejump', app.post('/completed-zipline-or-basejump',
challengeController.completedZiplineOrBasejump); challengeController.completedZiplineOrBasejump);
app.post('/completed-bonfire', challengeController.completedBonfire); app.post('/completed-bonfire', challengeController.completedBonfire);
*/
// Unique Check API route
/** /**
* OAuth sign-in routes. * OAuth sign-in routes.
@ -369,8 +330,9 @@ app.get(
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
app.use(errorHandler({ log: true })); app.use(errorHandler({ log: true }));
} else { } else {
// error handling in production // error handling in production disabling eslint due to express parity rules
app.use(function(err, req, res, next) { // for error handlers
app.use(function(err, req, res, next) { // eslint-disable-line
// respect err.status // respect err.status
if (err.status) { if (err.status) {