return async (env, head, body, scripts) => {
let favicons = await env.site.get_min_html('/_favicon/favicons.html')
let globals = await env.site.get_json('/_config/globals.json')
+ let session_cookie = await _require('/session_cookie.jst')
+ // initialize env.session_key, set cookie in env.response
let transaction = env.site.database.Transaction()
- let root = await transaction.get({})
- let sessions = await root.get('sessions', {})
- let pageviews = await root.get('pageviews', {})
+ let session = await session_cookie(env, transaction)
- let cookies = cookie.parse(env.request.headers.cookie || '')
- let session_key =
- Object.prototype.hasOwnProperty.call(cookies, 'session_key') ?
- cookies.session_key :
- crypto.randomBytes(16).toString('hex')
- let session = await sessions.get(session_key, {})
-
- let expires = new XDate()
- expires.addMonths(1)
- session.set('expires', expires.toUTCString())
- env.response.setHeader(
- 'Set-Cookie',
- 'session_key=' +
- session_key +
- '; expires=' +
- session.expires +
- '; path=/;'
- )
-
- let pageview = await pageviews.get(env.parsed_url.pathname, {})
+ let pageview = await (
+ await (
+ await transaction.get({})
+ ).get('pageviews', {})
+ ).get(env.parsed_url.pathname, {})
pageview.set('visits', (await pageview.get('visits') || 0) + 1)
let session_pageviews = await session.get('pageviews', {})