Add /api/sign_up/send_verification_email.json endpoint, add step 3 of sign up process...
[ndcode_site.git] / _lib / session_cookie.jst
index b0f09bf..d5b87a6 100644 (file)
@@ -1,6 +1,7 @@
-let XDate = require('xdate')
+let logjson = (await import('@ndcode/logjson')).default
 let cookie = require('cookie')
 let crypto = require('crypto')
+let XDate = require('xdate')
 
 return async (env, transaction) => {
   let cookies = cookie.parse(env.request.headers.cookie || '')
@@ -10,11 +11,11 @@ return async (env, transaction) => {
     await transaction.get({})
   ).get('sessions', {})
 
-  let session_key, session, expires = new XDate(now)
+  let session, expires = new XDate(now)
   if (
     Object.prototype.hasOwnProperty.call(cookies, 'session_key') &&
       (
-        session = await sessions.get(session_key = cookies.session_key)
+        session = await sessions.get(env.session_key = cookies.session_key)
       ) !== undefined &&
       now < await session.get('expires', 0)
   )
@@ -25,19 +26,20 @@ return async (env, transaction) => {
     // first request for session, maybe a bot, retain session for only 1 day
     expires.addDays(1)
     do {
-      session_key = crypto.randomBytes(16).toString('hex')
-    } while (sessions.has(session_key))
+      env.session_key = crypto.randomBytes(16).toString('hex')
+    } while (sessions.has(env.session_key))
     session = transaction.LazyObject()
-    sessions.set(session_key, session)
+    sessions.set(env.session_key, session)
   }
 
   await session.set('expires', expires.getTime())
-
   env.response.setHeader(
     'Set-Cookie',
-    `session_key=${session_key}; expires=${expires.toUTCString()}; path=/;`
+    `session_key=${env.session_key}; expires=${expires.toUTCString()}; path=/;`
   )
-  env.session_key = session_key
 
+  env.signed_in_as = await logjson.logjson_to_json(
+    await session.get('signed_in_as', null)
+  )
   return session
 }