Make default_value be in JSON not logjson format (faster and more convenient)
[ndcode_site.git] / 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   if (env.request.method == 'POST') {
7     let write_stream = new stream_buffers.WritableStreamBuffer()
8     let data = new Promise(
9       (resolve, reject) => {
10         write_stream.
11         on('finish', () => {resolve(write_stream.getContents())}).
12         on('error', () => {reject()})
13       }
14     )
15     env.request.pipe(write_stream)
16     let query = querystring.parse((await data).toString())
17     console.log('received feedback form:', JSON.stringify(query)) //query.page)
18
19     // save the form contents in a dated logfile, so that we can
20     // recover manually if the email doesn't send for some reason
21     date = new XDate()
22     query.date = date.toUTCString()
23
24     await env.site.ensure_dir('/_logs')
25     env.site.modify_json(
26       `/_logs/feedback_${date.toUTCString('yyyyMMdd')}.json`,
27       [],
28       async result => {result.value.push(query)}
29     )
30
31     // send email (asynchronously)
32     ;(await env.site.get_emailjs('/_config/email_feedback.json')).send(
33       {
34         text: query.message,
35         from: 'Feedback form <feedback@ndcode.org>',
36         to: 'Nick Downing <nick@ndcode.org>',
37         subject: 'Page: ' + query.page
38       },
39       (err, message) => {
40         if (err)
41           console.error(err.stack || err.message)
42         else
43           console.log('sent feedback email:', query.page)
44       }
45     )
46   }
47   env.site.serve(env, 200, Buffer.from('Thanks!'), 'feedback_form.html.jst')
48 }