Preparing for bonfire challenges, create Bonfire model, BonfireCompletion model, update bonfire controller, create initial bonfire seed data
This commit is contained in:
@ -1,68 +1,75 @@
|
||||
var _ = require('lodash'),
|
||||
debug = require('debug')('freecc:cntr:bonfires');
|
||||
// bonfire = require('./../models/Bonfire');
|
||||
debug = require('debug')('freecc:cntr:bonfires'),
|
||||
Bonfire = require('./../models/Bonfire');
|
||||
|
||||
/**
|
||||
* Bonfire controller
|
||||
*/
|
||||
|
||||
var highestBonfireNumber = 10;
|
||||
|
||||
exports.index = function(req, res) {
|
||||
res.render('bonfire/bonfire.jade', {
|
||||
title: 'Learn to code with Bonfire'
|
||||
});
|
||||
//Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
|
||||
// if (err) {
|
||||
// debug('bonfire err: ', err);
|
||||
// next(err);
|
||||
// }
|
||||
//});
|
||||
res.render('bonfire/bonfire.jade', {
|
||||
title: 'Learn to code with Bonfire'
|
||||
});
|
||||
|
||||
Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
|
||||
if (err) {
|
||||
debug('bonfire err: ', err);
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//exports.returnBonfire = function(req, res, next) {
|
||||
// var bonfireNumber = parseInt(req.params.bonfireNumber) || 0;
|
||||
// var verbs = [
|
||||
// 'ACED',
|
||||
// 'NAILED',
|
||||
// 'ROCKED',
|
||||
// 'SCORCHED',
|
||||
// 'DEVASTATED',
|
||||
// 'OWNED',
|
||||
// 'CRUSHED',
|
||||
// 'CONQUERED',
|
||||
// 'KILLED',
|
||||
// 'SHREDDED',
|
||||
// 'ANNIHILATED',
|
||||
// 'NUKED'
|
||||
// ];
|
||||
// var phrases = [
|
||||
// "Shout it from on top of a mountain",
|
||||
// "Tell everyone and their dogs",
|
||||
// "Show them. Show them all!",
|
||||
// "Inspire your friends",
|
||||
// "Tell the world of your greatness",
|
||||
// "Look accomplished on social media",
|
||||
// "Share news of your grand endeavor",
|
||||
// "Establish your alibi for the past two hours",
|
||||
// "Prove to mom that computers aren't just for games"
|
||||
// ];
|
||||
// if (bonfireNumber > 53) { bonfireNumber = 0; }
|
||||
// Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
|
||||
// if (err) {
|
||||
// debug('bonfire err: ', err);
|
||||
// next(err);
|
||||
// }
|
||||
// res.render('bonfires/show', {
|
||||
// //title: 'bonfire: ' + c[bonfireNumber].name,
|
||||
// //name: c[bonfireNumber].name,
|
||||
// //video: c[bonfireNumber].video,
|
||||
// //time: c[bonfireNumber].time,
|
||||
// //steps: c[bonfireNumber].steps,
|
||||
// //number: bonfireNumber,
|
||||
// //categories: c[bonfireNumber].category,
|
||||
// //cc: req.user ? req.user.bonfiresHash : undefined,
|
||||
// //points: req.user ? req.user.points : undefined,
|
||||
// //verb: verbs[Math.floor(Math.random() * verbs.length)],
|
||||
// //phrase: phrases[Math.floor(Math.random() * phrases.length)],
|
||||
// //bonfires: c
|
||||
// });
|
||||
// });
|
||||
//};
|
||||
exports.returnBonfire = function(req, res, next) {
|
||||
var bonfireNumber = parseInt(req.params.bonfireNumber) || 0;
|
||||
var verbs = [
|
||||
'ACED',
|
||||
'NAILED',
|
||||
'ROCKED',
|
||||
'SCORCHED',
|
||||
'DEVASTATED',
|
||||
'OWNED',
|
||||
'CRUSHED',
|
||||
'CONQUERED',
|
||||
'KILLED',
|
||||
'SHREDDED',
|
||||
'ANNIHILATED',
|
||||
'NUKED'
|
||||
];
|
||||
var phrases = [
|
||||
"Shout it from on top of a mountain",
|
||||
"Tell everyone and their dogs",
|
||||
"Show them. Show them all!",
|
||||
"Inspire your friends",
|
||||
"Tell the world of your greatness",
|
||||
"Look accomplished on social media",
|
||||
"Share news of your grand endeavor",
|
||||
"Establish your alibi for the past two hours",
|
||||
"Prove to mom that computers aren't just for games"
|
||||
];
|
||||
if (bonfireNumber > highestBonfireNumber) { bonfireNumber = 0; }
|
||||
Bonfire.find({}, null, { sort: { bonfireNumber: 1 } }, function(err, c) {
|
||||
if (err) {
|
||||
debug('bonfire err: ', err);
|
||||
next(err);
|
||||
}
|
||||
|
||||
res.render('bonfires/show', {
|
||||
title: 'bonfire: ' + c[bonfireNumber].name,
|
||||
name: c[bonfireNumber].name,
|
||||
number: bonfireNumber,
|
||||
difficulty: c[bonfireNumber].difficulty,
|
||||
description: c[bonfireNumber].description,
|
||||
publicTests: c[bonfireNumber].publicTests,
|
||||
privateTests: c[bonfireNumber].privateTests,
|
||||
challengeSeed: c[bonfireNumber].challengeSeed,
|
||||
|
||||
cc: req.user ? req.user.bonfiresHash : undefined,
|
||||
points: req.user ? req.user.points : undefined,
|
||||
verb: verbs[Math.floor(Math.random() * verbs.length)],
|
||||
phrase: phrases[Math.floor(Math.random() * phrases.length)],
|
||||
bonfires: c
|
||||
});
|
||||
});
|
||||
};
|
@ -6,6 +6,8 @@ var _ = require('lodash'),
|
||||
debug = require('debug')('freecc:cntr:challenges'),
|
||||
Challenge = require('./../models/Challenge');
|
||||
|
||||
var highestChallengeNumber = 53;
|
||||
|
||||
exports.returnChallenge = function(req, res, next) {
|
||||
var challengeNumber = parseInt(req.params.challengeNumber) || 0;
|
||||
var verbs = [
|
||||
@ -33,7 +35,7 @@ exports.returnChallenge = function(req, res, next) {
|
||||
"Establish your alibi for the past two hours",
|
||||
"Prove to mom that computers aren't just for games"
|
||||
];
|
||||
if (challengeNumber > 53) { challengeNumber = 0; }
|
||||
if (challengeNumber > highestChallengeNumber) { challengeNumber = 0; }
|
||||
Challenge.find({}, null, { sort: { challengeNumber: 1 } }, function(err, c) {
|
||||
if (err) {
|
||||
debug('Challenge err: ', err);
|
||||
|
@ -1,14 +1,27 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {exports.Schema}
|
||||
*/
|
||||
|
||||
new Schema({ _id: String })
|
||||
var ObjectId = require('mongoose').Types.ObjectId;
|
||||
var myObjectId = ObjectId.fromString('myhexstring');
|
||||
var bonfireSchema = new mongoose.Schema({
|
||||
|
||||
name: {
|
||||
type: String,
|
||||
unique: true
|
||||
},
|
||||
link: String,
|
||||
time: String,
|
||||
bonfireNumber: Number
|
||||
difficulty: Number,
|
||||
description: Array,
|
||||
publicTests: Array,
|
||||
privateTests: Array,
|
||||
challengeSeed: String,
|
||||
bonfireNumber: Number,
|
||||
number: Number
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Bonfire', bonfireSchema);
|
||||
|
15
models/BonfireCompletion.js
Normal file
15
models/BonfireCompletion.js
Normal file
@ -0,0 +1,15 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
var bonfireCompletionSchema = new mongoose.Schema({
|
||||
dateCompleted: Number,
|
||||
camper1: String,
|
||||
camper2: String,
|
||||
bonfireNumber: {
|
||||
bonfireNumber: Number,
|
||||
bonfireId: ObjectId
|
||||
},
|
||||
solution: String
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('BonfireCompletion', bonfireCompletionSchema);
|
744
models/User.js
744
models/User.js
@ -3,356 +3,356 @@ var crypto = require('crypto');
|
||||
var mongoose = require('mongoose');
|
||||
|
||||
var userSchema = new mongoose.Schema({
|
||||
email: {
|
||||
type: String,
|
||||
lowercase: true,
|
||||
unique: true,
|
||||
trim: true,
|
||||
sparse: true
|
||||
},
|
||||
password: String,
|
||||
facebook: String,
|
||||
twitter: String,
|
||||
google: String,
|
||||
github: String,
|
||||
linkedin: String,
|
||||
tokens: Array,
|
||||
points: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
challengesCompleted: { type: Array, default: [] },
|
||||
challengesHash: {
|
||||
0: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
1: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
2: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
3: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
4: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
5: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
6: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
7: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
8: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
9: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
10: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
11: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
12: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
13: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
14: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
15: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
16: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
17: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
18: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
19: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
20: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
21: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
22: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
23: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
24: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
25: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
26: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
27: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
28: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
29: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
30: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
31: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
32: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
33: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
34: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
35: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
36: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
37: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
38: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
39: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
40: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
41: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
42: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
43: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
44: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
45: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
46: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
47: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
48: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
49: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
50: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
51: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
52: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
53: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
54: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
55: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
56: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
57: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
58: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
59: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
profile: {
|
||||
username: {
|
||||
type: String,
|
||||
unique: true,
|
||||
sparse: true,
|
||||
lowercase: true,
|
||||
trim: true
|
||||
},
|
||||
bio: {
|
||||
type: String,
|
||||
defaults: ''
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
gender: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
location: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
picture: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
linkedinProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
githubProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
coderbyteProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
codepenProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
twitterHandle: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
portfolio: {
|
||||
website1Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website1Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website1Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
resetPasswordToken: String,
|
||||
resetPasswordExpires: Date
|
||||
email: {
|
||||
type: String,
|
||||
lowercase: true,
|
||||
unique: true,
|
||||
trim: true,
|
||||
sparse: true
|
||||
},
|
||||
password: String,
|
||||
facebook: String,
|
||||
twitter: String,
|
||||
google: String,
|
||||
github: String,
|
||||
linkedin: String,
|
||||
tokens: Array,
|
||||
points: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
challengesCompleted: { type: Array, default: [] },
|
||||
challengesHash: {
|
||||
0: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
1: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
2: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
3: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
4: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
5: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
6: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
7: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
8: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
9: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
10: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
11: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
12: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
13: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
14: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
15: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
16: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
17: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
18: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
19: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
20: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
21: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
22: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
23: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
24: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
25: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
26: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
27: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
28: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
29: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
30: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
31: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
32: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
33: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
34: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
35: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
36: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
37: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
38: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
39: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
40: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
41: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
42: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
43: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
44: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
45: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
46: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
47: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
48: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
49: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
50: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
51: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
52: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
53: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
54: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
55: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
56: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
57: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
58: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
59: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
profile: {
|
||||
username: {
|
||||
type: String,
|
||||
unique: true,
|
||||
sparse: true,
|
||||
lowercase: true,
|
||||
trim: true
|
||||
},
|
||||
bio: {
|
||||
type: String,
|
||||
defaults: ''
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
gender: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
location: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
picture: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
linkedinProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
githubProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
coderbyteProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
codepenProfile: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
twitterHandle: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
portfolio: {
|
||||
website1Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website1Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website1Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website2Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Link: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
website3Image: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
resetPasswordToken: String,
|
||||
resetPasswordExpires: Date
|
||||
});
|
||||
|
||||
/**
|
||||
@ -360,19 +360,19 @@ var userSchema = new mongoose.Schema({
|
||||
*/
|
||||
|
||||
userSchema.pre('save', function(next) {
|
||||
var user = this;
|
||||
var user = this;
|
||||
|
||||
if (!user.isModified('password')) { return next(); }
|
||||
if (!user.isModified('password')) { return next(); }
|
||||
|
||||
bcrypt.genSalt(5, function(err, salt) {
|
||||
if (err) { return next(err); }
|
||||
bcrypt.genSalt(5, function(err, salt) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
bcrypt.hash(user.password, salt, null, function(err, hash) {
|
||||
if (err) { return next(err); }
|
||||
user.password = hash;
|
||||
next();
|
||||
bcrypt.hash(user.password, salt, null, function(err, hash) {
|
||||
if (err) { return next(err); }
|
||||
user.password = hash;
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
@ -380,10 +380,10 @@ userSchema.pre('save', function(next) {
|
||||
*/
|
||||
|
||||
userSchema.methods.comparePassword = function(candidatePassword, cb) {
|
||||
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
|
||||
if (err) { return cb(err); }
|
||||
cb(null, isMatch);
|
||||
});
|
||||
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
|
||||
if (err) { return cb(err); }
|
||||
cb(null, isMatch);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@ -391,18 +391,18 @@ userSchema.methods.comparePassword = function(candidatePassword, cb) {
|
||||
*/
|
||||
|
||||
userSchema.methods.gravatar = function(size) {
|
||||
if (!size) { size = 200; }
|
||||
if (!size) { size = 200; }
|
||||
|
||||
if (!this.email) {
|
||||
return 'https://gravatar.com/avatar/?s=' + size + '&d=retro';
|
||||
}
|
||||
if (!this.email) {
|
||||
return 'https://gravatar.com/avatar/?s=' + size + '&d=retro';
|
||||
}
|
||||
|
||||
var md5 = crypto
|
||||
.createHash('md5')
|
||||
.update(this.email)
|
||||
.digest('hex');
|
||||
var md5 = crypto
|
||||
.createHash('md5')
|
||||
.update(this.email)
|
||||
.digest('hex');
|
||||
|
||||
return 'https://gravatar.com/avatar/' + md5 + '?s=' + size + '&d=retro';
|
||||
return 'https://gravatar.com/avatar/' + md5 + '?s=' + size + '&d=retro';
|
||||
};
|
||||
|
||||
module.exports = mongoose.model('User', userSchema);
|
||||
|
225
seed_data/bonfires.json
Normal file
225
seed_data/bonfires.json
Normal file
@ -0,0 +1,225 @@
|
||||
{
|
||||
"name": "Palindrome Tester",
|
||||
"difficulty": 1, // should be a range from 1-5
|
||||
"description": [
|
||||
"Your job is to determine if a provided string is a palindrome.",
|
||||
"The definition of a palindrome can be found at http://en.wikipedia.org/wiki/Palindrome.",
|
||||
"Strings will be passed in with varying formats, such as \"racecar\", \"RaceCar\", and \"race CAR\" among others.",
|
||||
"Return true if the string is a palindrome, otherwise false"
|
||||
],
|
||||
"publicTests": [
|
||||
"expect(palindrome(\"eye\")).to.be.a.(\"boolean\");",
|
||||
"assert.deepEqual(palindrome(\"eye\"), true);",
|
||||
"assert.deepEqual(palindrome(\"race car\"), true);",
|
||||
"assert.deepEqual(palindrome(\"not a palindrome\"), false);"
|
||||
],
|
||||
"privateTests": [
|
||||
"assert.deepEqual(palindrome(\"A man, a plan, a canal. Panama\"), true);",
|
||||
"assert.deepEqual(palindrome(\"never odd or even\"), true);",
|
||||
"assert.deepEqual(palindrome(\"nope\"), false);"
|
||||
],
|
||||
"challengeSeed": "function palindrome(str) {\n // Good luck!\n return true;\n}\n\n"
|
||||
}
|
||||
|
||||
/*
|
||||
"aaa48de84e1ecc7c742e1124"
|
||||
"ff0395860f5d3034dc0bfc94"
|
||||
"7123c8c441eddfaeb5bdef0d"
|
||||
"c3a4d278b9e760a0ffe8321f"
|
||||
"aceca143b92049a4392a859e"
|
||||
"ce9394f67d413734758e27e4"
|
||||
"1369953ef6f03098cb60e2f7"
|
||||
"fa229986db0716662e63163a"
|
||||
"0a6207dfc9ac12f223b4e686"
|
||||
"2e538b339cbcb7437e61d71f"
|
||||
"21de1104b8ea7c6a382442d9"
|
||||
"0aa3497514cb1d8a0ed04933"
|
||||
"3a45068415f5a20a5d4a2039"
|
||||
"6a73ec9b86f0e742f6c6ea76"
|
||||
"06dc21940748badcdb29561e"
|
||||
"0f2341ef36740b5c2b9d830c"
|
||||
"dc4cc7ce1fd0418859b10e0b"
|
||||
"1fcda9b5e0bf502c8b770374"
|
||||
"482879c42188cde1f9ad3d8f"
|
||||
"3d680bd03fd291028af57f4f"
|
||||
"6b444fe5aa97359238bd3c0d"
|
||||
"72d6ad274e72ffcd399e05cb"
|
||||
"e864a710647bb6883c9ec617"
|
||||
"024dcd8cc0178de7daa4f59f"
|
||||
"ded24fb937a3fd60dc624677"
|
||||
"9ad4c3b2aebe7282e973e5df"
|
||||
"d16c66ecc656c82899a2d427"
|
||||
"ee3e4bf39b840609dd88f5af"
|
||||
"9a10d27eb6ab6f5030bdbcd9"
|
||||
"b4cca5ecdeca1eebc0dc4183"
|
||||
"ccdf1ef407864df62b03331e"
|
||||
"1baa0329f02e41a5517b11a6"
|
||||
"b5b33e5ecf6c02a5780ac419"
|
||||
"84b690f53cd6cbbbf4a361f5"
|
||||
"4e3b1b9d41ff11bdf3722ffe"
|
||||
"1fd45e64c43cd640abcf8a76"
|
||||
"c8bd32cdd943c88fb8a74934"
|
||||
"9e5440269d09b71f07002333"
|
||||
"5080016b8b68f40f7476c341"
|
||||
"f762d45cc870d9f18c6b7024"
|
||||
"cf21358ab1245c7033504b42"
|
||||
"41eff7cb0f2fd8ec9e0cbf68"
|
||||
"a344c63de6a00feea5c541e0"
|
||||
"7ab3c18c0815d7b1f02e8768"
|
||||
"a6f36e4387e2e1e25af4e000"
|
||||
"9064af1431c1ff3aaa15a0d6"
|
||||
"50946066aaba43a294155ab5"
|
||||
"70e82e77857317d6936ecdcc"
|
||||
"dc644dc20d5b02ffd7c8cc94"
|
||||
"92af1e9f1813619d820dec4d"
|
||||
"9d4a077fdaaa24b78a54cee9"
|
||||
"cfd5fa7aea14fb294bd4f5ff"
|
||||
"068541b6c5130ca541d6c05c"
|
||||
"39f4d1f12142d583b0318265"
|
||||
"4a201b8fa69d11cb669dca8c"
|
||||
"6fa6bba2e334dd2c9e5a6911"
|
||||
"30ff082b6a28558f16743fea"
|
||||
"afed31c4dc2ddf056e263acb"
|
||||
"b2431ecf36f0b780959aa03d"
|
||||
"54e42938ab6fa923a5fbfbff"
|
||||
"48d50e3ff5e96f152d912ebf"
|
||||
"6c7aad2ee996132f76630c05"
|
||||
"2705f0482774977fa9b5c7bc"
|
||||
"c09d6682c7a144d9afd4bfab"
|
||||
"1a0a30c55dd9bc2fff4e2aac"
|
||||
"30c22b502e80afd144d79120"
|
||||
"8f882989bbc98c68b6c7347e"
|
||||
"888bf771b63a5f64e6b696ed"
|
||||
"959aa13a2e6439fd5d29c5fe"
|
||||
"d03d311ca64bf59a2404dcd0"
|
||||
"7a650f3e4308a097d7883b1f"
|
||||
"54c207808ac349fa34ed24a9"
|
||||
"3cb12e3ea31fe15ba9d234e5"
|
||||
"0d9f8123e52f791ae172f627"
|
||||
"387518b1bb96bd918e7d0b91"
|
||||
"27198d8918c9802ac0b06a58"
|
||||
"7a519a552f723c6b1fdc9389"
|
||||
"4240096651a50f888765ed60"
|
||||
"8ba94f78cc44cfb82b3678d2"
|
||||
"1cf7c3bda6ec7952923bc90f"
|
||||
"cd54811e976edbc798a87c24"
|
||||
"e4ee17912f5d7d80d41dc52d"
|
||||
"572346dd1874a0c749c3a031"
|
||||
"cf700031502680580ff25980"
|
||||
"7054518832e5c7efde04a58c"
|
||||
"7716c6b6a3dcc9c5df79a262"
|
||||
"f4d1084c692f5a07c25a1b47"
|
||||
"817b80892a78fc6f83eab4eb"
|
||||
"ae0e0adda6d063d3fd2c9499"
|
||||
"33184c427ecaab77b5332521"
|
||||
"c6c4da707e3eed987eb65ba6"
|
||||
"40f9801913c0cb9800960bf7"
|
||||
"af11cf78e8340f172ba76bbe"
|
||||
"c1daea28b5996b8e8800e300"
|
||||
"7312b3234b5f2f50887597b9"
|
||||
"3e4361c5356b30f8ce833268"
|
||||
"e6fc8827b9aa96fc91035ac2"
|
||||
"11658fe51b23319533c72106"
|
||||
"34207fe236870fd855392ef6"
|
||||
"dc970a2b17aa1432d180d078"
|
||||
"2f1686ad711b5ac3d98905b5"
|
||||
"ed20f4bf782e10ec26c7b3b1"
|
||||
"cf4d6241df36b0bbcea401e2"
|
||||
"97e414eb00338bd7bd5d1b31"
|
||||
"bcfebb743729d4fc51b0db49"
|
||||
"52782c1eaa15e050ac748b18"
|
||||
"57f65a6cd2eb0a2745fc90ee"
|
||||
"fcc569e80808c6cd84c839cc"
|
||||
"2447f8e0e3ccfd895a619695"
|
||||
"600687fe6332b2e2b20d6a84"
|
||||
"0f8a972361baddb3ac64b6d9"
|
||||
"f768594ab352cf8e2282b615"
|
||||
"3163b25e25b0d6859df17751"
|
||||
"c73d68f0cf77aa113337fcde"
|
||||
"cc16163137f13f70decbcb5c"
|
||||
"4adbf6c7ac2004ee8ae20f55"
|
||||
"c2779f78a0e57dcee471cefd"
|
||||
"bf44903cd2fca4ae4daf0818"
|
||||
"ca8013372d58365e21bd0428"
|
||||
"e308901ca272ad447dca965a"
|
||||
"ec8cefe29832cd726185119f"
|
||||
"36bf51da3f32b1e9550f3b15"
|
||||
"aefff6dffdf534a6c9601f70"
|
||||
"ce237971a71127f9ce747232"
|
||||
"99f4d97fae16ccbeb8c26d46"
|
||||
"c9f6480328ec4b63b1034826"
|
||||
"ce10bb6e80b09533cb21c9a5"
|
||||
"311a54aaf062b29422ac0b02"
|
||||
"b2073bec873b295c04e9fb7e"
|
||||
"7b7d94035d63c9c0598b242b"
|
||||
"e19e9a0487f1bd3eabdb777c"
|
||||
"eeafe5169a2afd9ce3979698"
|
||||
"96c7a1f9fb73468fdb770034"
|
||||
"77e607be2498160d3ceeff60"
|
||||
"c784fa6b1fd7d9aedb05b607"
|
||||
"a76319bca87e0b57bc79064f"
|
||||
"a08db36785c51e5b92a6e92f"
|
||||
"0933ab4a366d57fd1f1c0a48"
|
||||
"17663f17a835cfe0bca64f4a"
|
||||
"aee8323d1de634fc42c11d90"
|
||||
"682044caf09a068e26c11cab"
|
||||
"1346fdbe3c6fcb808b99cdf6"
|
||||
"26fd8f47fe4791e2dd07b2e0"
|
||||
"b1da27dd129216c2ead2e162"
|
||||
"618adebe192e896eb1501708"
|
||||
"2628d9eeb38db68c0b255a75"
|
||||
"1fb78eda5deb8972cc357a9b"
|
||||
"2fdebb85a401de75bb580a02"
|
||||
"c59eae24bee36f63c938723d"
|
||||
"fb66b55d5617e27ca64836a3"
|
||||
"55994022872e01fd41d8ec7b"
|
||||
"53ae83b5490e1cf55625ff3d"
|
||||
"c44975deeb67b96e6cc37eb5"
|
||||
"94c64d5ff48ca6487f5e0b07"
|
||||
"e34e7c1a3d70678955a5df8e"
|
||||
"6426d30a923dec6377132c47"
|
||||
"d67811849354ded9d34c9ece"
|
||||
"01e7ae81207cfd230cb02747"
|
||||
"e24558477f94bcdd82f16ebe"
|
||||
"4370f6dcc2f53bd5abed7899"
|
||||
"679b1145cd3072fbcd513bcb"
|
||||
"4dafd3fd84e7a337ef3e9933"
|
||||
"2aca3d41cb148603b4a2d70b"
|
||||
"5e5aa8c960d024109543c577"
|
||||
"c5f5f313c8a7056bbcdb7639"
|
||||
"a7b2aaa4cf85fce98cdeb314"
|
||||
"e556c0d14bc0ce9cc7bde0ca"
|
||||
"922a8284880a7c879d846f90"
|
||||
"b146cf2fbf206ca48687e9b6"
|
||||
"fbdc52bb7c7620bd4508e5a3"
|
||||
"23d79a262a81459e75576cc2"
|
||||
"a26721706d3b9f971cef3ce6"
|
||||
"fb3801ed1b056a3ab4bbfdc1"
|
||||
"d5cafae617f1485826de335c"
|
||||
"e9650dfc8b570f9d33381012"
|
||||
"453c804c7ce82e83305cd751"
|
||||
"3eaab01bdd1393be8d461777"
|
||||
"2b6d9ddd4754b71d92ed31b7"
|
||||
"2338e9af6acab9fcf5327f6a"
|
||||
"588e7405c30c346ed2ea5e44"
|
||||
"eec8837994054fb2043b6166"
|
||||
"0877406795956ca9eb13fea1"
|
||||
"1dea30e852067eec48a24035"
|
||||
"ee716ce45ea812167ed2497a"
|
||||
"9621d5aeaf8de9b2f58977bd"
|
||||
"e9bb838723083bac7f83d602"
|
||||
"ef64da08bbe787891d47c31b"
|
||||
"e01b6616cc6cf7819172f7f3"
|
||||
"17c821c34fca587daec981fc"
|
||||
"d0c4b7153dcb3e6af47bcd98"
|
||||
"5188eb00680051c35cd6e0f0"
|
||||
"9fc7b68e736a1f4931226ad8"
|
||||
"b5eac897471f125224a3e594"
|
||||
"c1d0f890a02c85a9320f96d5"
|
||||
"7e3b1ca1b1b1e990367f0cc2"
|
||||
"bff5ff77174c43f7c681e0bd"
|
||||
"ddeb794121937d07a887c9e6"
|
||||
"9db902e930f25fbacc125087"
|
||||
"4f82d277b47ae9c98095f068"
|
||||
"24f999491fa46cd194c7fd35"
|
||||
*/
|
Reference in New Issue
Block a user