Add the ability to click on the verification link and verify your email
[ndcode_site.git] / api / feedback.html.jst
1 let querystring = require('querystring')
2 let stream_buffers = require('stream-buffers')
3 let XDate = require('xdate')
4
5 return async env => {
6   let globals = await env.site.get_json('/_config/globals.json')
7   let nodemailer_feedback = await env.site.get_nodemailer(
8     '/_config/email_feedback.json'
9   )
10
11   let message
12   if (env.request.method === 'POST') {
13     let write_stream = new stream_buffers.WritableStreamBuffer()
14     let data = new Promise(
15       (resolve, reject) => {
16         write_stream.
17         on('finish', () => {resolve(write_stream.getContents())}).
18         on('error', () => {reject()})
19       }
20     )
21     env.request.pipe(write_stream)
22     let query = querystring.parse((await data).toString())
23     console.log('received feedback form:', query.page)
24
25     // save the form contents in a dated logfile, so that we can
26     // recover manually if the email doesn't send for some reason
27     date = new XDate()
28     query.date = date.toUTCString()
29
30     let transaction = await env.site.database.Transaction()
31     ;(
32       await (
33         await (
34           await (
35             await transaction.get({})
36           ).get('logs', {})
37         ).get(date.toUTCString('yyyyMMdd'), {})
38       ).get('feedback', [])
39     ).push(transaction.json_to_logjson(query))
40     transaction.commit()
41
42     // send email (asynchronously)
43     nodemailer_feedback.sendMail(
44       {
45         from: globals.feedback_from,
46         to: globals.feedback_to,
47         subject: 'Page: ' + query.page,
48         text: query.message,
49       },
50       (err, message) => {
51         if (err)
52           console.error(err.stack || err.message)
53         else
54           console.log('sent feedback email:', query.page)
55       }
56     )
57
58     message = 'Thanks!'
59   }
60   else
61     message = 'Please POST.'
62
63   env.site.serve(env, 200, Buffer.from(message), 'feedback.html.jst')
64 }