| Conditions | 7 | 
| Paths | 18 | 
| Total Lines | 70 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | import fs from 'fs-extra'  | 
            ||
| 44 |       crypto.randomBytes(20, function(err, buf) { | 
            ||
| 45 |         var resetPasswordToken = buf.toString('hex') | 
            ||
| 46 | var forgotExpire = config.forgotExpire  | 
            ||
| 47 | |||
| 48 |         User.operations.update({ | 
            ||
| 49 | id:user.id,  | 
            ||
| 50 | resetPasswordToken: resetPasswordToken,  | 
            ||
| 51 | resetPasswordExpires: Date.now() + (forgotExpire*60*1000)  | 
            ||
| 52 | })  | 
            ||
| 53 | |||
| 54 |         var requestedUrl = req.protocol + '://' + req.get('Host') + '/abe/users/reset?token=' + resetPasswordToken | 
            ||
| 55 | |||
| 56 | var smtp = config.smtp  | 
            ||
| 57 | var emailConf = config.users.email  | 
            ||
| 58 | html = emailConf.html || ''  | 
            ||
| 59 | |||
| 60 |         if(typeof emailConf.templateHtml !== 'undefined' && emailConf.templateHtml !== null) { | 
            ||
| 61 | var fileHtml = path.join(config.root, emailConf.templateHtml)  | 
            ||
| 62 |           if (coreUtils.file.exist(fileHtml)) { | 
            ||
| 63 | html = fs.readFileSync(fileHtml, 'utf8')  | 
            ||
| 64 | }  | 
            ||
| 65 | }  | 
            ||
| 66 | |||
| 67 |         var template = Handlebars.compile(html, {noEscape: true}) | 
            ||
| 68 | |||
| 69 |         html = template({ | 
            ||
| 70 |           express: { | 
            ||
| 71 | req: req,  | 
            ||
| 72 | res: res  | 
            ||
| 73 | },  | 
            ||
| 74 | forgotUrl: requestedUrl,  | 
            ||
| 75 |           siteUrl: req.protocol + '://' + req.get('Host'), | 
            ||
| 76 | user: user  | 
            ||
| 77 | })  | 
            ||
| 78 | |||
| 79 |         if(typeof smtp === 'undefined' || smtp === null) { | 
            ||
| 80 |           var transport = nodemailer.createTransport('direct', {}) | 
            ||
| 81 |           transport.sendMail({ | 
            ||
| 82 | from: emailConf.from, // sender address  | 
            ||
| 83 | to: user.email, // list of receivers  | 
            ||
| 84 | subject: emailConf.subject, // Subject line  | 
            ||
| 85 |             text: emailConf.text.replace(/\{\{forgotUrl\}\}/g, requestedUrl), // plaintext body | 
            ||
| 86 |             html: html.replace(/\{\{forgotUrl\}\}/g, requestedUrl) // html body | 
            ||
| 87 | }, console.error)  | 
            ||
| 88 | |||
| 89 | showHtml(res, req, 'Check your inbox')  | 
            ||
| 90 |         }else if(typeof smtp !== 'string') { | 
            ||
| 91 | // create reusable transporter object using the default SMTP transport  | 
            ||
| 92 |           var transporter = nodemailer.createTransport('SMTP', smtp) | 
            ||
| 93 | |||
| 94 | // setup e-mail data with unicode symbols  | 
            ||
| 95 |           var mailOptions = { | 
            ||
| 96 | from: emailConf.from, // sender address  | 
            ||
| 97 | to: user.email, // list of receivers  | 
            ||
| 98 | subject: emailConf.subject, // Subject line  | 
            ||
| 99 |             text: emailConf.text.replace(/\{\{forgotUrl\}\}/g, requestedUrl), // plaintext body | 
            ||
| 100 |             html: html.replace(/\{\{forgotUrl\}\}/g, requestedUrl) // html body | 
            ||
| 101 | }  | 
            ||
| 102 | |||
| 103 | // send mail with defined transport object  | 
            ||
| 104 |           transporter.sendMail(mailOptions, function(error, info){ | 
            ||
| 105 |             if(error){ | 
            ||
| 106 | return console.log(error)  | 
            ||
| 107 | }  | 
            ||
| 108 | |||
| 109 | showHtml(res, req, 'Check your inbox')  | 
            ||
| 110 |             console.log('Message sent: ' + info.response) | 
            ||
| 111 | })  | 
            ||
| 112 | }  | 
            ||
| 113 | })  | 
            ||
| 114 | })  | 
            ||
| 120 | export default route  |