Add /_lib/get_nodemailer.jst
[ndcode_site.git] / api / feedback.json.jst
1 let XDate = require('xdate')
2
3 return async env => {
4   let get_nodemailer = await _require('/_lib/get_nodemailer.jst')
5   let get_session = await _require('/_lib/get_session.jst')
6   let post_request = await _require('/_lib/post_request.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_from, feedback_to
25       try {
26         // initialize env.session_key, set cookie in env.response
27         await get_session(env, transaction)
28
29         nodemailer = await get_nodemailer(env, transaction, 'feedback')
30         let globals = await get_globals(env, transaction)
31         feedback_from = await globals.get_json('feedback_from')
32         feedback_to = await globals.get_json('feedback_to')
33
34         await transaction.commit()
35       }
36       catch (error) {
37         transaction.rollback()
38         throw error
39       }
40
41       await nodemailer.sendMail(
42         {
43           from: feedback_from,
44           to: feedback_to,
45           subject: 'Page: ' + page,
46           text: message
47         }
48       )
49     }
50   )
51 }