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