Skip to content

Commit

Permalink
initialize default cookie options globally
Browse files Browse the repository at this point in the history
  • Loading branch information
lzztt committed Sep 13, 2016
1 parent 2888b8c commit bd6a21b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 25 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "koa-session-minimal",
"version": "2.0.0",
"version": "2.0.1",
"description": "Minimal implementation of session middleware for Koa 2. Inspired by and compatible with koa-generic-session",
"main": "dist/session.js",
"scripts": {
Expand Down
45 changes: 21 additions & 24 deletions src/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,36 @@ const MemoryStore = require('./memory_store')

const ONE_DAY = 24 * 3600 * 1000 // one day in milliseconds

const deleteSession = (ctx, key, ckOption, store, sid) => {
const deleteOption = Object.assign({}, ckOption)
const deleteSession = (ctx, key, cookie, store, sid) => {
const deleteOption = Object.assign({}, cookie)
delete deleteOption.maxAge
ctx.cookies.set(key, null, deleteOption)
store.destroy(`${key}:${sid}`)
}

const saveSession = (ctx, key, ckOption, store, sid) => {
const ttl = ckOption.maxAge > 0 ? ckOption.maxAge : ONE_DAY
ctx.cookies.set(key, sid, ckOption)
const saveSession = (ctx, key, cookie, store, sid) => {
const ttl = cookie.maxAge > 0 ? cookie.maxAge : ONE_DAY
ctx.cookies.set(key, sid, cookie)
store.set(`${key}:${sid}`, ctx.session, ttl)
}

module.exports = options => {
const opt = options || {}
const key = opt.key || 'koa:sess'
const store = new Store(opt.store || new MemoryStore())
const cookie = opt.cookie || {}
const defaultCookie = Object.assign({
maxAge: 0, // default to use session cookie
path: '/',
secure: false,
httpOnly: true,
}, opt.cookie || {}, {
overwrite: true, // overwrite previous session cookie changes
signed: false, // disable signed option
})
if (!(defaultCookie.maxAge >= 0)) defaultCookie.maxAge = 0

return async (ctx, next) => {
// setup cookie options
const ckOption = {
maxAge: 0, // default to use session cookie
path: '/',
secure: false,
httpOnly: true,
}
Object.assign(ckOption, cookie)
Object.assign(ckOption, {
overwrite: true, // overwrite previous session cookie changes
signed: false, // disable signed option
})
if (!(ckOption.maxAge >= 0)) ckOption.maxAge = 0
const cookie = Object.assign({}, defaultCookie)

// initialize session id and data
const cookieSid = ctx.cookies.get(key)
Expand All @@ -61,7 +58,7 @@ module.exports = options => {
sid = uid.sync(24)
},
setMaxAge: ms => {
ckOption.maxAge = ms >= 0 ? ms : 0
cookie.maxAge = ms >= 0 ? ms : 0
},
}

Expand All @@ -71,19 +68,19 @@ module.exports = options => {

if (sid !== cookieSid) { // a new session id
// clean old session
if (cookieSid) deleteSession(ctx, key, ckOption, store, cookieSid)
if (cookieSid) deleteSession(ctx, key, cookie, store, cookieSid)

// save new session
if (sessionHasData) saveSession(ctx, key, ckOption, store, sid)
if (sessionHasData) saveSession(ctx, key, cookie, store, sid)
} else { // an existing session
// data has not been changed
if (deepEqual(ctx.session, sessionClone)) return

// update session data
if (sessionHasData) {
saveSession(ctx, key, ckOption, store, sid)
saveSession(ctx, key, cookie, store, sid)
} else {
deleteSession(ctx, key, ckOption, store, sid)
deleteSession(ctx, key, cookie, store, sid)
}
}
}
Expand Down

0 comments on commit bd6a21b

Please sign in to comment.