|
|
/*! * 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; } };
|