| /*! |
| * Tobi - CookieJar |
| * Copyright(c) 2010 LearnBoost <dev@learnboost.com> |
| * MIT Licensed |
| */ |
| |
| /** |
| * Module dependencies. |
| */ |
| |
| var url = require('url'); |
| |
| /** |
| * Initialize a new `CookieJar`. |
| * |
| * @api private |
| */ |
| |
| var CookieJar = exports = module.exports = function CookieJar() { |
| this.cookies = []; |
| }; |
| |
| /** |
| * Add the given `cookie` to the jar. |
| * |
| * @param {Cookie} cookie |
| * @api private |
| */ |
| |
| CookieJar.prototype.add = function(cookie){ |
| this.cookies = this.cookies.filter(function(c){ |
| // Avoid duplication (same path, same name) |
| return !(c.name == cookie.name && c.path == cookie.path); |
| }); |
| this.cookies.push(cookie); |
| }; |
| |
| /** |
| * Get cookies for the given `req`. |
| * |
| * @param {IncomingRequest} req |
| * @return {Array} |
| * @api private |
| */ |
| |
| CookieJar.prototype.get = function(req){ |
| var path = url.parse(req.url).pathname |
| , now = new Date |
| , specificity = {}; |
| return this.cookies.filter(function(cookie){ |
| if (0 == path.indexOf(cookie.path) && now < cookie.expires |
| && cookie.path.length > (specificity[cookie.name] || 0)) |
| return specificity[cookie.name] = cookie.path.length; |
| }); |
| }; |
| |
| /** |
| * Return Cookie string for the given `req`. |
| * |
| * @param {IncomingRequest} req |
| * @return {String} |
| * @api private |
| */ |
| |
| CookieJar.prototype.cookieString = function(req){ |
| var cookies = this.get(req); |
| if (cookies.length) { |
| return cookies.map(function(cookie){ |
| return cookie.name + '=' + cookie.value; |
| }).join('; '); |
| } |
| }; |