Move *.jst from / to /_lib to keep things tidy, implement /_lib/Problem.jst and ...
[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(
19     'captcha',
20     transaction.json_to_logjson(
21       {
22         text: captcha.text(),
23         expires: expires.getTime()
24       }
25     )
26   )
27
28   await transaction.commit()
29
30   // serve the png file
31   env.caching = false
32   let captcha_buffer = util.promisify(captcha.buffer).bind(captcha)
33   env.site.serve(env, 200, await captcha_buffer(), 'verification_image.png.jst')
34 }