mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.4 KiB
73 lines
1.4 KiB
13 years ago
|
/*!
|
||
|
* 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('; ');
|
||
|
}
|
||
|
};
|