2015-10-28 21:33:28 -04:00
'use strict' ;
2015-03-08 11:54:55 -04:00
var nodemailer = require ( 'nodemailer' ) ,
2015-08-04 00:14:42 -04:00
mongoose = require ( 'mongoose' ) ,
chalk = require ( 'chalk' ) ,
config = require ( '../config/config' ) ,
mg = require ( '../config/lib/mongoose' ) ;
2015-03-08 11:54:55 -04:00
var transporter = nodemailer . createTransport ( config . mailer . options ) ;
var link = 'reset link here' ; // PUT reset link here
2015-08-04 00:14:42 -04:00
var email = {
from : config . mailer . from ,
subject : 'Security update'
} ;
var text = [
'Dear {{name}},' ,
'\n' ,
'We have updated our password storage systems to be more secure and more efficient, please click the link below to reset your password so you can login in the future.' ,
link ,
'\n' ,
'Thanks,' ,
'The Team'
] . join ( '\n' ) ;
2015-03-08 11:54:55 -04:00
2015-08-04 00:14:42 -04:00
mg . loadModels ( ) ;
mg . connect ( function ( db ) {
var User = mongoose . model ( 'User' ) ;
User . find ( ) . exec ( function ( err , users ) {
if ( err ) {
throw err ;
}
var processedCount = 0 ,
errorCount = 0 ;
// report and exit if no users were found
if ( users . length === 0 ) {
return reportAndExit ( processedCount , errorCount ) ;
}
for ( var i = 0 ; i < users . length ; i ++ ) {
sendEmail ( users [ i ] ) ;
}
function sendEmail ( user ) {
email . to = user . email ;
email . text = email . html = text . replace ( '{{name}}' , user . displayName ) ;
transporter . sendMail ( email , emailCallback ( user ) ) ;
2015-10-28 21:33:28 -04:00
}
2015-08-04 00:14:42 -04:00
function emailCallback ( user ) {
return function ( err , info ) {
processedCount ++ ;
if ( err ) {
errorCount ++ ;
if ( config . mailer . options . debug ) {
console . log ( 'Error: ' , err ) ;
}
console . error ( '[' + processedCount + '/' + users . length + '] ' + chalk . red ( 'Could not send email for ' + user . displayName ) ) ;
} else {
console . log ( '[' + processedCount + '/' + users . length + '] Sent reset password email for ' + user . displayName ) ;
}
if ( processedCount === users . length ) {
return reportAndExit ( processedCount , errorCount ) ;
}
} ;
2015-10-28 21:33:28 -04:00
}
2015-08-04 00:14:42 -04:00
// report the processing results and exit
function reportAndExit ( processedCount , errorCount ) {
var successCount = processedCount - errorCount ;
console . log ( ) ;
if ( processedCount === 0 ) {
console . log ( chalk . yellow ( 'No users were found.' ) ) ;
} else {
2015-12-10 20:31:51 +01:00
var alert ;
if ( ! errorCount ) {
alert = chalk . green ;
} else if ( ( successCount / processedCount ) < 0.8 ) {
alert = chalk . red ;
} else {
alert = chalk . yellow ;
}
2015-08-04 00:14:42 -04:00
console . log ( alert ( 'Sent ' + successCount + ' of ' + processedCount + ' emails successfully.' ) ) ;
}
process . exit ( 0 ) ;
}
} ) ;
2015-03-08 11:54:55 -04:00
} ) ;