-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 || '')
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)
)
// 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
}