req.flash('warning',`<u>${req.body.email}</u> is not a valid email address. `);
resolve();
}
// Check if unchanged
elseif(req.user.email===req.body.email){
resolve();
}
// Check uniqueness
else{
User.findOne({email:req.body.email})
.then((existingUser)=>{
// Not unique!
if(existingUser&&existingUser.id!==req.user.id){
//console.log("Email not unique!");
req.flash('warning',`That email, <u>${req.body.email}</u>, is already in use by another user! `);
resolve();
}
// It's unique
else{
//console.log("Email is unique");
req.user.newEmail=req.body.email;
// Create token
//console.log(`Creating email token...`);
req.user.createEmailToken((err,token)=>{
if(err){reject(err);}
// Send token to user by email
//console.log(`Mailing new email token to ${req.body.email}...`);
mail.send({
to:`"${req.user.name}" <${req.body.email}>`,
from:mail.from,
subject:'Confirm your new email address for Tracman',
text:mail.text(`A request has been made to change your Tracman email address. If you did not initiate this request, please disregard it. \n\nTo confirm your email, follow this link:\n${env.url}/settings/email/${token}. `),
html:mail.html(`<p>A request has been made to change your Tracman email address. If you did not initiate this request, please disregard it. </p><p>To confirm your email, follow this link:<br><a href="${env.url}/settings/email/${token}">${env.url}/settings/email/${token}</a>. </p>`)
})
.then(()=>{
req.flash('warning',`An email has been sent to <u>${req.body.email}</u>. Check your inbox to confirm your new email address. `);
resolve();
})
.catch(reject);
});
}
})
.catch(reject);
}
});
// Validate slug
constcheckSlug=newPromise((resolve,reject)=>{
// Check existence
if(req.body.slug===''){
req.flash('warning',`You must supply a slug. `);
resolve();
}
// Check if unchanged
elseif(req.user.slug===slug(xss(req.body.slug))){
resolve();
}
// Check uniqueness
else{
User.findOne({slug:req.body.slug})
.then((existingUser)=>{
// Not unique!
if(existingUser&&existingUser.id!==req.user.id){
req.flash('warning',`That slug, <u>${req.body.slug}</u>, is already in use by another user! `);
text:mail.text(`A request has been made to change your tracman password. If you did not initiate this request, please contact support at keith@tracman.org. \n\nTo change your password, follow this link:\n${env.url}/settings/password/${token}. \n\nThis request will expire at ${expirationTimeString}. `),
html:mail.html(`<p>A request has been made to change your tracman password. If you did not initiate this request, please contact support at <a href="mailto:keith@tracman.org">keith@tracman.org</a>. </p><p>To change your password, follow this link:<br><a href="${env.url}/settings/password/${token}">${env.url}/settings/password/${token}</a>. </p><p>This request will expire at ${expirationTimeString}. </p>`)
req.flash('success',`An link has been sent to <u>${req.user.email}</u>. Click on the link to complete your password change. This link will expire in one hour (${expirationTimeString}). `);
mw.throwErr(newError(`That password could be cracked in ${daysToCrack} days! Come up with a more complex password that would take at least 10 days to crack. `));