| |
| /*! |
| * Connect - session - Cookie |
| * Copyright(c) 2010 Sencha Inc. |
| * Copyright(c) 2011 TJ Holowaychuk |
| * MIT Licensed |
| */ |
| |
| /** |
| * Module dependencies. |
| */ |
| |
| var utils = require('../../utils'); |
| |
| /** |
| * Initialize a new `Cookie` with the given `options`. |
| * |
| * @param {Object} options |
| * @api private |
| */ |
| |
| var Cookie = module.exports = function Cookie(options) { |
| this.path = '/'; |
| this.httpOnly = true; |
| this.maxAge = 14400000; |
| 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 |
| } |
| }, |
| |
| /** |
| * Return a serialized cookie string. |
| * |
| * @return {String} |
| * @api public |
| */ |
| |
| serialize: function(name, val){ |
| return utils.serializeCookie(name, val, this.data); |
| }, |
| |
| /** |
| * Return JSON representation of this cookie. |
| * |
| * @return {Object} |
| * @api private |
| */ |
| |
| toJSON: function(){ |
| return this.data; |
| } |
| }; |