Implement a way to get/set the nodemailer object (has an entries for contact, feedbac...
[ndcode_site.git] / api / account / sign_up / send_email_verification_link.json.jst
index c682c2c..ac64ba5 100644 (file)
@@ -1,10 +1,8 @@
 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')
@@ -24,6 +22,9 @@ return async env => {
         )
 
       let transaction = await env.site.database.Transaction()
+      let link_code
+      let nodemailer_noreply, site_url, noreply_from, noreply_signature
+      let given_names, family_name
       try {
         // initialize env.session_key, set cookie in env.response
         await session_cookie(env, transaction)
@@ -47,7 +48,7 @@ return async env => {
             422
           )
 
-        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(
@@ -55,22 +56,33 @@ return async env => {
           {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: 'Email address verification',
-            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: 'Email address verification',
+          text: `Dear ${given_names},
 
 We have received a request to sign up using your email address.
 
@@ -82,15 +94,8 @@ The link is valid for 24 hours.
 Thanks,
 ${noreply_signature}
 `
-          }
-        )
-
-        await transaction.commit()
-      }
-      catch (error) {
-        transaction.rollback()
-        throw error
-      }
+        }
+      )
     }
   )
 }