|
|
/*!
|
|
* Connect - session - Cookie
|
|
* Copyright(c) 2010 Sencha Inc.
|
|
* Copyright(c) 2011 TJ Holowaychuk
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var utils = require('../../utils')
|
|
, cookie = require('cookie');
|
|
|
|
/**
|
|
* Initialize a new `Cookie` with the given `options`.
|
|
*
|
|
* @param {IncomingMessage} req
|
|
* @param {Object} options
|
|
* @api private
|
|
*/
|
|
|
|
var Cookie = module.exports = function Cookie(options) {
|
|
this.path = '/';
|
|
this.maxAge = null;
|
|
this.httpOnly = true;
|
|
if (options) utils.merge(this, options);
|
|
this.originalMaxAge = undefined == this.originalMaxAge
|
|
? this.maxAge
|
|
: this.originalMaxAge;
|
|
};
|
|
|
|
/*!
|
|
* Prototype.
|
|
*/
|
|
|
|
Cookie.prototype = {
|
|
|
|
/**
|
|
* Set expires `date`.
|
|
*
|
|
* @param {Date} date
|
|
* @api public
|
|
*/
|
|
|
|
set expires(date) {
|
|
this._expires = date;
|
|
this.originalMaxAge = this.maxAge;
|
|
},
|
|
|
|
/**
|
|
* Get expires `date`.
|
|
*
|
|
* @return {Date}
|
|
* @api public
|
|
*/
|
|
|
|
get expires() {
|
|
return this._expires;
|
|
},
|
|
|
|
/**
|
|
* Set expires via max-age in `ms`.
|
|
*
|
|
* @param {Number} ms
|
|
* @api public
|
|
*/
|
|
|
|
set maxAge(ms) {
|
|
this.expires = 'number' == typeof ms
|
|
? new Date(Date.now() + ms)
|
|
: ms;
|
|
},
|
|
|
|
/**
|
|
* Get expires max-age in `ms`.
|
|
*
|
|
* @return {Number}
|
|
* @api public
|
|
*/
|
|
|
|
get maxAge() {
|
|
return this.expires instanceof Date
|
|
? this.expires.valueOf() - Date.now()
|
|
: this.expires;
|
|
},
|
|
|
|
/**
|
|
* Return cookie data object.
|
|
*
|
|
* @return {Object}
|
|
* @api private
|
|
*/
|
|
|
|
get data() {
|
|
return {
|
|
originalMaxAge: this.originalMaxAge
|
|
, expires: this._expires
|
|
, secure: this.secure
|
|
, httpOnly: this.httpOnly
|
|
, domain: this.domain
|
|
, path: this.path
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Check if the cookie has a reasonably large max-age.
|
|
*
|
|
* @return {Boolean}
|
|
* @api private
|
|
*/
|
|
|
|
get hasLongExpires() {
|
|
var week = 604800000;
|
|
return this.maxAge > (4 * week);
|
|
},
|
|
|
|
/**
|
|
* Return a serialized cookie string.
|
|
*
|
|
* @return {String}
|
|
* @api public
|
|
*/
|
|
|
|
serialize: function(name, val){
|
|
return cookie.serialize(name, val, this.data);
|
|
},
|
|
|
|
/**
|
|
* Return JSON representation of this cookie.
|
|
*
|
|
* @return {Object}
|
|
* @api private
|
|
*/
|
|
|
|
toJSON: function(){
|
|
return this.data;
|
|
}
|
|
};
|