e13452c864b8654c63a6e968a64f82af9f9a4852
[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         let root = await transaction.get({})
30         nodemailer_feedback = nodemailer.createTransport(
31           await (await root.get('nodemailer')).get_json('feedback')
32         )
33         let globals = await root.get('globals')
34         feedback_from = await globals.get_json('feedback_from')
35         feedback_to = await globals.get_json('feedback_to')
36
37         await transaction.commit()
38       }
39       catch (error) {
40         transaction.rollback()
41         throw error
42       }
43
44       await nodemailer_feedback.sendMail(
45         {
46           from: feedback_from,
47           to: feedback_to,
48           subject: 'Page: ' + page,
49           text: message
50         }
51       )
52     }
53   )
54 }