400c2845d054afb1464e102a34aec0b174260d13
[ndcode_site.git] / api / feedback.json.jst
1 let XDate = require('xdate')
2
3 return async env => {
4   let globals = await env.site.get_json('/_config/globals.json')
5   let nodemailer_feedback = await env.site.get_nodemailer(
6     '/_config/nodemailer_feedback.json'
7   )
8   let post_request = await _require('/_lib/post_request.jst')
9   let session_cookie = await _require('/_lib/session_cookie.jst')
10
11   await post_request(
12     // env
13     env,
14     // handler
15     async (page, message) => {
16       // coerce and/or validate
17       page = page.slice(0, 256)
18       mesage = message.slice(0, 65536)
19       if (page.length === 0 || message.length === 0)
20         throw new Problem(
21           'Bad request',
22           'Minimum length check failed',
23           400
24         )
25
26       let transaction = await env.site.database.Transaction()
27       try {
28         // initialize env.session_key, set cookie in env.response
29         await session_cookie(env, transaction)
30         await transaction.commit()
31       }
32       catch (error) {
33         transaction.rollback()
34         throw error
35       }
36
37       await nodemailer_feedback.sendMail(
38         {
39           from: globals.feedback_from,
40           to: globals.feedback_to,
41           subject: 'Page: ' + page,
42           text: message
43         }
44       )
45     }
46   )
47 }