let crypto = require('crypto')
+let nodemailer = require('nodemailer')
let XDate = require('xdate')
return async env => {
- let nodemailer_noreply = await env.site.get_nodemailer(
- '/_config/nodemailer_noreply.json'
- )
let post_request = await _require('/_lib/post_request.jst')
let session_cookie = await _require('/_lib/session_cookie.jst')
let Problem = await _require('/_lib/Problem.jst')
)
let transaction = await env.site.database.Transaction()
+ let link_code
+ let nodemailer_noreply, noreply_from, noreply_signature
+ let given_names, family_name
try {
// initialize env.session_key, set cookie in env.response
await session_cookie(env, transaction)
421
)
- let link_code = crypto.randomBytes(16).toString('hex')
+ link_code = crypto.randomBytes(16).toString('hex')
let expires = new XDate()
expires.addDays(1)
account.set_json(
{password, link_code, expires: expires.getTime()}
)
- let globals = await (await transaction.get({})).get('globals')
- let site_url = await globals.get_json('site_url')
- let noreply_from = await globals.get_json('noreply_from')
- let noreply_signature = await globals.get_json('noreply_signature')
+ let root = await transaction.get({})
+ nodemailer_noreply = nodemailer.createTransport(
+ await (await root.get('nodemailer')).get_json('noreply')
+ )
+ let globals = await root.get('globals')
+ site_url = await globals.get_json('site_url')
+ noreply_from = await globals.get_json('noreply_from')
+ noreply_signature = await globals.get_json('noreply_signature')
+
+ given_names = await account.get_json('given_names', '')
+ family_name = await account.get_json('family_name', '')
- let given_names = await account.get_json('given_names', '')
- let family_name = await account.get_json('family_name', '')
- let name =
- family_name.length ? `${given_names} ${family_name}` : given_names
+ await transaction.commit()
+ }
+ catch (error) {
+ transaction.rollback()
+ throw error
+ }
- await nodemailer_noreply.sendMail(
- {
- from: noreply_from,
- to: `${name} <${email}>`,
- subject: 'Password reset',
- text: `Dear ${given_names},
+ let name =
+ family_name.length ? `${given_names} ${family_name}` : given_names
+ await nodemailer_noreply.sendMail(
+ {
+ from: noreply_from,
+ to: `${name} <${email}>`,
+ subject: 'Password reset',
+ text: `Dear ${given_names},
We have received a request to reset the account password for your email address.
Thanks,
${noreply_signature}
`
- }
- )
-
- await transaction.commit()
- }
- catch (error) {
- transaction.rollback()
- throw error
- }
+ }
+ )
}
)
}