086654527b62f8d677ac20fdc5dac3023122859c
[ndcode_site.git] / api / verification_image.png.jst
1 let captchagen = require('captchagen')
2 let util = require('util')
3 let XDate = require('xdate')
4
5 return async env => {
6   let get_session = await _require('/_lib/get_session.jst')
7
8   let captcha = captchagen.create()
9   captcha.generate()
10
11   let transaction = await env.site.database.Transaction()
12   try {
13     let root = await transaction.get({})
14     let session = await get_session(env, root)
15
16     // store captcha text in the session for validation when form submitted
17     let expires = new XDate(env.now)
18     expires.addHours(1)
19     session.set_json(
20       'captcha',
21       {text: captcha.text(), expires: expires.getTime()}
22     )
23
24     await transaction.commit()
25   }
26   catch (error) {
27     transaction.rollback()
28     throw error
29   }
30
31   // serve the png file
32   env.caching = false
33   let captcha_buffer = util.promisify(captcha.buffer).bind(captcha)
34   env.site.serve(env, 200, await captcha_buffer(), 'verification_image.png.jst')
35 }