11d951f78499e3bf674bbdf7f11e0548c7987b59
[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   let globals = await env.site.get_json('/_config/globals.json')
7
8   let message
9   if (env.request.method === 'POST') {
10     let write_stream = new stream_buffers.WritableStreamBuffer()
11     let data = new Promise(
12       (resolve, reject) => {
13         write_stream.
14         on('finish', () => {resolve(write_stream.getContents())}).
15         on('error', () => {reject()})
16       }
17     )
18     env.request.pipe(write_stream)
19     let query = querystring.parse((await data).toString())
20     console.log('received feedback form:', query.page)
21
22     // save the form contents in a dated logfile, so that we can
23     // recover manually if the email doesn't send for some reason
24     date = new XDate()
25     query.date = date.toUTCString()
26
27     await env.site.ensure_dir('/_logs')
28     env.site.modify_json(
29       `/_logs/feedback_${date.toUTCString('yyyyMMdd')}.json`,
30       [],
31       async result => {result.value.push(query)}
32     )
33
34     // send email (asynchronously)
35     let emailjs_feedback = await env.site.get_emailjs(
36       '/_config/email_feedback.json'
37     )
38     emailjs_feedback.send(
39       {
40         from: globals.feedback_from,
41         to: globals.feedback_to,
42         subject: 'Page: ' + query.page,
43         text: query.message,
44       },
45       (err, message) => {
46         if (err)
47           console.error(err.stack || err.message)
48         else
49           console.log('sent feedback email:', query.page)
50       }
51     )
52
53     message = 'Thanks!'
54   }
55   else
56     message = 'Please POST.'
57
58   env.site.serve(env, 200, Buffer.from(message), 'feedback.html.jst')
59 }