caa0ce565f76af5cc718f5225840fd53f9719612
[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 session_cookie = await _require('/_lib/session_cookie.jst')
7
8   let captcha = captchagen.create()
9   captcha.generate()
10
11   // initialize env.session_key, set cookie in env.response
12   let transaction = await env.site.database.Transaction()
13   let session = await session_cookie(env, transaction)
14
15   // store captcha text in the session for validation when form submitted
16   let expires = new XDate()
17   expires.addHours(1)
18   session.set_json(
19     'captcha',
20     {text: captcha.text(), expires: expires.getTime()}
21   )
22
23   await transaction.commit()
24
25   // serve the png file
26   env.caching = false
27   let captcha_buffer = util.promisify(captcha.buffer).bind(captcha)
28   env.site.serve(env, 200, await captcha_buffer(), 'verification_image.png.jst')
29 }