Merge branch 'staging' of http://github.com/FreeCodeCamp/freecodecamp into staging

This commit is contained in:
terakilobyte
2015-06-15 18:50:31 -04:00
3 changed files with 72 additions and 76 deletions

View File

@ -21,41 +21,6 @@ module.exports = function(User) {
User.validatesUniquenessOf('username'); User.validatesUniquenessOf('username');
debug('setting up user hooks'); debug('setting up user hooks');
// send verification email to new camper
User.afterRemote('create', function(ctx, user, next) {
debug('user created, sending email');
if (!user.email) { return next(); }
var mailOptions = {
type: 'email',
to: user.email,
from: 'Team@freecodecamp.com',
subject: 'Welcome to Free Code Camp!',
redirect: '/',
text: [
'Greetings from San Francisco!\n\n',
'Thank you for joining our community.\n',
'Feel free to email us at this address if you have ',
'any questions about Free Code Camp.\n',
'And if you have a moment, check out our blog: ',
'blog.freecodecamp.com.\n',
'Good luck with the challenges!\n\n',
'- the Free Code Camp Volunteer Team'
].join('')
};
user.verify(mailOptions, function(err) {
if (err) { return next(err); }
debug('verification email sent');
ctx.req.flash('success', {
msg: [
'Please check your email and click on the verification link '
+ 'before logging in.'
]
});
ctx.res.redirect('/');
});
});
User.afterRemote('confirm', function(ctx) { User.afterRemote('confirm', function(ctx) {
ctx.req.flash('success', { ctx.req.flash('success', {
msg: [ msg: [
@ -65,31 +30,12 @@ module.exports = function(User) {
ctx.res.redirect('/email-signin'); ctx.res.redirect('/email-signin');
}); });
User.afterRemote('login', function(ctx, instance, next) { User.afterRemote('login', function(ctx, user, next) {
var res = ctx.res; var res = ctx.res;
var req = ctx.req; var req = ctx.req;
// var args = ctx.args;
User.findOne({where: {email: ctx.args.credentials.email}}, var accessToken = {};
function(err, response) {
if (err) {
return next(err);
}
if (response.emailVerified !== true) {
return res.redirect('/');
}
User.login({
email: ctx.args.credentials.email,
password: ctx.args.credentials.password,
ttl: Infinity
}, function(err, accessToken) {
if (err) {
req.flash('errors', {
msg: [
'Invalid username or password.'
]
});
return res.redirect('/');
}
var config = { var config = {
signed: !!req.signedCookies, signed: !!req.signedCookies,
maxAge: accessToken.ttl maxAge: accessToken.ttl
@ -98,7 +44,8 @@ module.exports = function(User) {
res.cookie('access_token', accessToken.id, config); res.cookie('access_token', accessToken.id, config);
res.cookie('userId', accessToken.userId, config); res.cookie('userId', accessToken.userId, config);
} }
req.logIn(response, function(err) {
return req.logIn(user, function(err) {
if (err) { if (err) {
return next(err); return next(err);
} }
@ -106,9 +53,6 @@ module.exports = function(User) {
return res.redirect('/'); return res.redirect('/');
}); });
}); });
});
return res.redirect('/');
});
User.afterRemote('logout', function(ctx, result, next) { User.afterRemote('logout', function(ctx, result, next) {
var res = ctx.result; var res = ctx.result;

View File

@ -12,6 +12,7 @@ module.exports = function(app) {
var User = app.models.User; var User = app.models.User;
var UserIdentity = app.models.UserIdentity; var UserIdentity = app.models.UserIdentity;
var UserCredential = app.models.UserCredential; var UserCredential = app.models.UserCredential;
var Email = app.models.Email;
User.observe('before delete', function(ctx, next) { User.observe('before delete', function(ctx, next) {
debug('removing user', ctx.where); debug('removing user', ctx.where);
var id = ctx.where && ctx.where.id ? ctx.where.id : null; var id = ctx.where && ctx.where.id ? ctx.where.id : null;
@ -41,4 +42,51 @@ module.exports = function(app) {
} }
); );
}); });
// set email varified false on user email signup
// should not be set with oauth signin methods
User.beforeRemote('create', function(ctx, user, next) {
var body = ctx.req.body;
if (body) {
body.emailVerified = false;
}
next();
});
// send welcome email to new camper
User.afterRemote('create', function(ctx, user, next) {
debug('user created, sending email');
if (!user.email) { return next(); }
var mailOptions = {
type: 'email',
to: user.email,
from: 'Team@freecodecamp.com',
subject: 'Welcome to Free Code Camp!',
redirect: '/',
text: [
'Greetings from San Francisco!\n\n',
'Thank you for joining our community.\n',
'Feel free to email us at this address if you have ',
'any questions about Free Code Camp.\n',
'And if you have a moment, check out our blog: ',
'blog.freecodecamp.com.\n',
'Good luck with the challenges!\n\n',
'- the Free Code Camp Volunteer Team'
].join('')
};
debug('sending welcome email');
Email.send(mailOptions, function(err) {
if (err) { return next(err); }
ctx.req.logIn(user, function(err) {
if (err) { return next(err); }
ctx.req.flash('success', {
msg: [ 'thanks for joining freecodecamp!' ]
});
ctx.res.redirect('/');
});
});
});
}; };

View File

@ -28,6 +28,7 @@ module.exports = function(app) {
router.post('/reset/:token', postReset); router.post('/reset/:token', postReset);
router.get('/email-signup', getEmailSignup); router.get('/email-signup', getEmailSignup);
router.get('/email-signin', getEmailSignin); router.get('/email-signin', getEmailSignin);
router.get('/account/api', getAccountAngular); router.get('/account/api', getAccountAngular);
router.post('/account/profile', postUpdateProfile); router.post('/account/profile', postUpdateProfile);
router.post('/account/password', postUpdatePassword); router.post('/account/password', postUpdatePassword);
@ -97,6 +98,9 @@ module.exports = function(app) {
*/ */
function getAccount (req, res) { function getAccount (req, res) {
if (!req.user) {
return res.redirect('/');
}
res.render('account/account', { res.render('account/account', {
title: 'Manage your Free Code Camp Account' title: 'Manage your Free Code Camp Account'
}); });
@ -108,7 +112,7 @@ module.exports = function(app) {
function getAccountAngular (req, res) { function getAccountAngular (req, res) {
res.json({ res.json({
user: req.user user: req.user || {}
}); });
} }