+let XDate = require('xdate')
+
+return async env => {
+ let post_request = await _require('/_lib/post_request.jst')
+ let session_cookie = await _require('/_lib/session_cookie.jst')
+ let Problem = await _require('/_lib/Problem.jst')
+
+ post_request(
+ // env
+ env,
+ // api
+ '/api/sign_up/set_draft',
+ // func
+ async details => {
+ // coerce and/or validate
+ details = {
+ email: details.email.slice(0, 256).toLowerCase(),
+ given_names: details.given_names.slice(0, 256),
+ family_name: details.family_name.slice(0, 256),
+ password: details.password.slice(0, 256),
+ contact_me: details.contact_me ? true : false
+ }
+
+ let transaction = await env.site.database.Transaction()
+ try {
+ // initialize env.session_key, set cookie in env.response
+ let session = await session_cookie(env, transaction)
+
+ session.set('sign_up_draft', transaction.json_to_logjson(details))
+ await transaction.commit()
+ }
+ catch (error) {
+ transaction.rollback()
+ throw error
+ }
+ }
+ )
+}