Skip to content

Commit

Permalink
added express middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
jed committed Jan 12, 2012
1 parent 0bc6681 commit e7b3b84
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 21 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
node_modules
1 change: 0 additions & 1 deletion index.js

This file was deleted.

9 changes: 8 additions & 1 deletion lib/cookies.js
Expand Up @@ -55,7 +55,7 @@ Cookies.prototype = {
cookie.name += ".sig"
headers.push( cookie.toHeader() )
}

res.setHeader( "Set-Cookie", headers )
return this
}
Expand Down Expand Up @@ -102,4 +102,11 @@ function getPattern( name ) {
)
}

Cookies.connect = Cookies.express = function(keys) {
return function(req, res, next) {
req.cookies = res.cookies = new Cookies(req, res, keys)
next()
}
}

module.exports = Cookies
32 changes: 19 additions & 13 deletions package.json
@@ -1,17 +1,23 @@
{
"name": "cookies",
"version": "0.1.7",
"version": "0.2.0",
"description": "Cookies, optionally signed using Keygrip.",
"main": "./index",
"engines": [
"node"
],
"directories": {
"lib": "./lib"
},
"files": [
""
],
"main": "./lib/cookies",
"dependencies": {},
"devDependencies": {}
}
"devDependencies": {
"express": "*",
"keygrip": "*"
},
"engines": {
"node": "*"
},
"author": "Jed Schmidt <tr@nslator.jp> (http://jed.is)",
"homepage": "https://github.com/jed/cookies",
"repository": {
"type": "git",
"url": "git://github.com/jed/cookies.git"
},
"scripts": {
"test": "node ./test/http.js"
}
}
66 changes: 66 additions & 0 deletions test/express.js
@@ -0,0 +1,66 @@
#!/usr/bin/env node

var assert = require( "assert" )
, express = require( "express" )
, http = require( "http" )
, keys = require( "keygrip" )()
, cookies = require( "../" ).express
, options = { host: "localhost", port: 8000, path: "/set" }
, app = express.createServer()

app.use( cookies( keys ) )

app.get( "/set", function(req, res) {
res.cookies
// set a regular cookie
.set( "unsigned", "foo", { httpOnly: false } )

// set a signed cookie
.set( "signed", "bar", { signed: true } )

// mimic a signed cookie, but with a bogus signature
.set( "tampered", "baz" )
.set( "tampered.sig", "bogus" )

res.writeHead(302, {Location: "/"})
res.end()
})

app.get("/", function(req, res) {
var unsigned = req.cookies.get( "unsigned" )
, signed = req.cookies.get( "signed", { signed: true } )
, tampered = req.cookies.get( "tampered", { signed: true } )

assert.equal( unsigned, "foo" )
assert.equal( signed, "bar" )
assert.notEqual( tampered, "baz" )
assert.equal( tampered, undefined )

res.send(
"unsigned expected: foo\n" +
"unsigned actual: " + unsigned + "\n\n" +
"signed expected: bar\n" +
"signed actual: " + signed + "\n\n" +
"tampered expected: undefined\n"+
"tampered: " + tampered + "\n"
)
})

app.listen( 8000 )

http.get( options, function( res ) {
var header = res.headers[ "set-cookie" ]
, body = ""

console.log( "\ncookies set:", header )
console.log( "\n============\n" )

options.path = res.headers[ "Location" ]
options.headers = { "Cookie": header.join(";") }

http.get( options, function( res ) {
res.on( "data", function( chunk ){ body += chunk } )
res.on( "end", function(){ console.log( body ) })
app.close()
})
})
14 changes: 8 additions & 6 deletions test.js → test/http.js
@@ -1,3 +1,5 @@
#!/usr/bin/env node

var assert = require( "assert" )
, http = require( "http" )
, keys = require( "keygrip" )()
Expand Down Expand Up @@ -36,12 +38,12 @@ server = http.createServer( function( req, res ) {

res.writeHead( 200, { "Content-Type": "text/plain" } )
res.end(
"unsigned expected: foo\n\n" +
"unsigned expected: foo\n" +
"unsigned actual: " + unsigned + "\n\n" +
"signed expected: bar\n\n" +
"signed expected: bar\n" +
"signed actual: " + signed + "\n\n" +
"tampered expected: undefined\n\n"+
"tampered: " + tampered + "\n\n"
"tampered expected: undefined\n"+
"tampered: " + tampered + "\n"
)
})

Expand All @@ -51,8 +53,8 @@ http.get( options, function( res ) {
var cookies = res.headers[ "set-cookie" ]
, body = ""

console.log( "cookies set:", cookies )
console.log( "============" )
console.log( "\ncookies set:", cookies )
console.log( "\n============\n" )

options.path = res.headers[ "location" ]
options.headers = { "Cookie": cookies.join(";") }
Expand Down

0 comments on commit e7b3b84

Please sign in to comment.