fix: Add error handling and refactoring of Observable methods
This commit is contained in:
committed by
Berkeley Martinez
parent
a426ff7ef9
commit
3f332fc1f0
@ -107,7 +107,10 @@ module.exports = function(User) {
|
||||
User.findOne$ = Observable.fromNodeCallback(User.findOne, User);
|
||||
User.update$ = Observable.fromNodeCallback(User.updateAll, User);
|
||||
User.count$ = Observable.fromNodeCallback(User.count, User);
|
||||
User.findOrCreate$ = Observable.fromCallback(User.findOrCreate, User);
|
||||
User.findOrCreate$ = Observable.fromNodeCallback(User.findOrCreate, User);
|
||||
User.prototype.createAccessToken$ = Observable.fromNodeCallback(
|
||||
User.prototype.createAccessToken
|
||||
);
|
||||
});
|
||||
|
||||
User.beforeRemote('create', function({ req }) {
|
||||
@ -566,30 +569,25 @@ module.exports = function(User) {
|
||||
emailVerified: false
|
||||
};
|
||||
return User.findOrCreate$({ where: { email }}, userObj)
|
||||
.map(([ err, user, isCreated ]) => {
|
||||
if (err) {
|
||||
return dedent`
|
||||
Oops, something is not right, please try again later.
|
||||
`;
|
||||
}
|
||||
.flatMap(([ user, isCreated ]) => {
|
||||
|
||||
const minutesLeft = getWaitPeriod(user.emailAuthLinkTTL);
|
||||
if (minutesLeft) {
|
||||
if (minutesLeft > 0) {
|
||||
const timeToWait = minutesLeft ?
|
||||
`${minutesLeft} minute${minutesLeft > 1 ? 's' : ''}` :
|
||||
'a few seconds';
|
||||
debug('request before wait time : ' + timeToWait);
|
||||
return dedent`
|
||||
return Observable.of(dedent`
|
||||
Please wait ${timeToWait} to resend an authentication link.
|
||||
`;
|
||||
`);
|
||||
}
|
||||
|
||||
const renderAuthEmail = isCreated ?
|
||||
renderSignUpEmail : renderSignInEmail;
|
||||
|
||||
// create a temporary access token with ttl for 1 hour
|
||||
return user.createAccessToken({ ttl: 60 * 60 * 1000 }, (err, token) => {
|
||||
if (err) { throw err; }
|
||||
// create a temporary access token with ttl for 15 minutes
|
||||
return user.createAccessToken$({ ttl: 15 * 60 * 1000 })
|
||||
.flatMap(token => {
|
||||
|
||||
const { id: loginToken } = token;
|
||||
const loginEmail = user.email;
|
||||
@ -597,29 +595,27 @@ module.exports = function(User) {
|
||||
const mailOptions = {
|
||||
type: 'email',
|
||||
to: user.email,
|
||||
<<<<<<< HEAD
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Free Code Camp - Authentication Request!',
|
||||
=======
|
||||
from: isDev ?
|
||||
process.env.EMAIL_SENDER : 'team@freecodecamp.com',
|
||||
subject: 'freeCodeCamp - Authentication Request!',
|
||||
>>>>>>> fix(email): allow sender email var for development
|
||||
text: renderAuthEmail({
|
||||
loginEmail,
|
||||
loginToken
|
||||
})
|
||||
};
|
||||
|
||||
this.email.send(mailOptions, err =>{
|
||||
if (err) { throw err; }
|
||||
});
|
||||
const emailAuthLinkTTL = token.created;
|
||||
this.update$({
|
||||
emailAuthLinkTTL
|
||||
})
|
||||
.do(() => {
|
||||
this.emailAuthLinkTTL = emailAuthLinkTTL;
|
||||
return this.email.send$(mailOptions)
|
||||
.flatMap(() => {
|
||||
const emailAuthLinkTTL = token.created;
|
||||
return this.update$({
|
||||
emailAuthLinkTTL
|
||||
})
|
||||
.map(() => {
|
||||
return dedent`
|
||||
If you entered a valid email, a magic link is on its way.
|
||||
Please follow that link to sign in.
|
||||
`;
|
||||
});
|
||||
});
|
||||
|
||||
return dedent`
|
||||
@ -628,8 +624,8 @@ module.exports = function(User) {
|
||||
`;
|
||||
});
|
||||
})
|
||||
.map((msg) => {
|
||||
if (msg) { return msg; }
|
||||
.catch(err => {
|
||||
if (err) { debug(err); }
|
||||
return dedent`
|
||||
Oops, something is not right, please try again later.
|
||||
`;
|
||||
|
Reference in New Issue
Block a user