Add expiry on sign up draft (to prevent leakage of personal information)
[ndcode_site.git] / api / account / sign_up / get_draft.json.jst
1 let logjson = (await import('@ndcode/logjson')).default
2 let XDate = require('xdate')
3
4 return async env => {
5   let post_request = await _require('/_lib/post_request.jst')
6   let session_cookie = await _require('/_lib/session_cookie.jst')
7   let Problem = await _require('/_lib/Problem.jst')
8
9   await post_request(
10     // env
11     env,
12     // handler
13     async () => {
14       let transaction = await env.site.database.Transaction()
15       try {
16         // initialize env.session_key, set cookie in env.response
17         let session = await session_cookie(env, transaction)
18
19         let sign_up_draft = await session.get('sign_up_draft')
20         let details =
21           sign_up_draft !== undefined &&
22             XDate.now() < await logjson.logjson_to_json(
23               await sign_up_draft.get('expires')
24             ) ? {
25               email: await logjson.logjson_to_json(
26                 await sign_up_draft.get('email')
27               ),
28               given_names: await logjson.logjson_to_json(
29                 await sign_up_draft.get('given_names')
30               ),
31               family_name: await logjson.logjson_to_json(
32                 await sign_up_draft.get('family_name')
33               ),
34               contact_me: await logjson.logjson_to_json(
35                 await sign_up_draft.get('contact_me')
36               )
37             } : null
38
39         await transaction.commit()
40         return details
41       }
42       catch (error) {
43         transaction.rollback()
44         throw error
45       }
46     }
47   )
48 }