860f3e2373d6562d1acf608ddda2585636549daa
[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     // endpoint
16     '/api/feedback.json',
17     // handler
18     async (page, message) => {
19       // coerce and/or validate
20       page = page.slice(0, 256)
21       mesage = message.slice(0, 65536)
22       if (page.length === 0 || message.length === 0)
23         throw new Problem(
24           'Bad request',
25           'Minimum length check failed',
26           400
27         )
28
29       let transaction = await env.site.database.Transaction()
30       try {
31         // initialize env.session_key, set cookie in env.response
32         await session_cookie(env, transaction)
33         await transaction.commit()
34       }
35       catch (error) {
36         transaction.rollback()
37         throw error
38       }
39
40       await nodemailer_feedback.sendMail(
41         {
42           from: globals.feedback_from,
43           to: globals.feedback_to,
44           subject: 'Page: ' + page,
45           text: message
46         }
47       )
48     }
49   )
50 }