Skip to content

Instantly share code, notes, and snippets.

@sebmck
Created September 6, 2012 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sebmck/3655238 to your computer and use it in GitHub Desktop.
Save sebmck/3655238 to your computer and use it in GitHub Desktop.
Cookie = require('connect').middleware.session.Cookie
crypto = require 'crypto'
module.exports = (opts) -> (req, res, next) ->
cookie = new Cookie
sign = (data) ->
hmac = crypto.createHmac 'sha1', opts.secret
hmac.update data
hmac.digest 'hex'
decode = ->
[data, signature] = req.cookies[opts.key].split '--'
return {} unless signature is sign data
try
JSON.parse do new Buffer(data, 'base64').toString
catch e
{}
encode = ->
json = JSON.stringify req.session
base64 = new Buffer(json).toString 'base64'
"#{base64}--#{sign base64}"
writeHead = res.writeHead
res.writeHead = (status, headers) ->
res.setHeader 'Set-Cookie', cookie.serialize opts.key, do encode
res.writeHead = writeHead
res.writeHead status, headers
req.session = do decode
do next
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment