From 48d53b21078197ae11820d163e87c30797e779e2 Mon Sep 17 00:00:00 2001 From: Carl Leitner Date: Fri, 12 Sep 2014 13:33:11 +0000 Subject: [PATCH] passes cookies on. fixes #188 --- package.json | 1 + src/middleware/router.coffee | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/package.json b/package.json index 04e726654..6bd7e55b3 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "cookie" : "0.1.2", "mongodb": "1.4.7", "koa": "0.5.2", "koa-route": "~1.0.2", diff --git a/src/middleware/router.coffee b/src/middleware/router.coffee index 737ae6c62..8c79df94b 100644 --- a/src/middleware/router.coffee +++ b/src/middleware/router.coffee @@ -10,6 +10,9 @@ config = require '../config/config' config.mongo = config.get('mongo') logger = require "winston" status = require "http-status" +cookie = require 'cookie' + + containsMultiplePrimaries = (routes) -> numPrimaries = 0 @@ -106,6 +109,8 @@ sendHttpRequest = (ctx, responseDst, options, secured, callback) -> responseDst.header = {} for key, value of routeRes.headers switch key + when 'set-cookie' + setCookiesOnContext ctx, value when 'location' then responseDst.redirect(value) else responseDst.header[key] = value @@ -150,6 +155,23 @@ sendHttpRequest = (ctx, responseDst, options, secured, callback) -> routeReq.end() + + +setCookiesOnContext = (ctx,value) -> + for c_key,c_value in value + c_opts = {path:false,httpOnly:false} #clear out default values in cookie module + c_vals = {} + for p_key,p_val of cookie.parse c_key + p_key_l = p_key.toLowerCase() + switch p_key_l + when 'max-age' then c_opts['maxage'] = parseInt p_val, 10 + when 'expires' then c_opts['expires'] = new Date p_val + when 'path','domain','secure','signed','overwrite' then c_opts[p_key_l] = p_val + when 'httponly' then c_opts['httpOnly'] = p_val + else c_vals[p_key] = p_val + for p_key,p_val of c_vals + ctx.cookies.set p_key,p_val,c_opts + sendSocketRequest = (ctx, responseDst, options, secured, callback) -> requestBody = ctx.body client = new net.Socket()