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