Change /_lib/session_cookie.jst to /_lib/get_session.jst
[ndcode_site.git] / api / account / change_details / set.json.jst
1 let XDate = require('xdate')
2
3 return async env => {
4   let post_request = await _require('/_lib/post_request.jst')
5   let get_session = await _require('/_lib/get_session.jst')
6   let Problem = await _require('/_lib/Problem.jst')
7
8   await post_request(
9     // env
10     env,
11     // handler
12     async details => {
13       details = {
14         given_names: details.given_names.slice(0, 256),
15         family_name: details.family_name.slice(0, 256),
16         contact_me: details.contact_me ? true : false
17       }
18       if (details.given_names.length === 0)
19         throw new Problem(
20           'Bad request',
21           'Minimum length check failed',
22           400
23         )
24
25       let transaction = await env.site.database.Transaction()
26       try {
27         // initialize env.session_key, set cookie in env.response
28         await get_session(env, transaction)
29         if (env.signed_in_as === null)
30           throw new Problem('Unauthorized', 'Please sign in first.', 401)
31
32         let account = await (
33           await (
34             await transaction.get({})
35           ).get('accounts', {})
36         ).get(env.signed_in_as)
37         account.set_json('given_names', details.given_names)
38         account.set_json('family_name', details.family_name)
39         account.set_json('contact_me', details.contact_me)
40
41         await transaction.commit()
42       }
43       catch (error) {
44         transaction.rollback()
45         throw error
46       }
47     }
48   )
49 }