Spaces:
Running
Running
/*! | |
* Connect - session - Cookie | |
* Copyright(c) 2010 Sencha Inc. | |
* Copyright(c) 2011 TJ Holowaychuk | |
* MIT Licensed | |
*/ | |
; | |
/** | |
* Module dependencies. | |
*/ | |
var cookie = require('cookie') | |
var deprecate = require('depd')('express-session') | |
/** | |
* 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) { | |
if (typeof options !== 'object') { | |
throw new TypeError('argument options must be a object') | |
} | |
for (var key in options) { | |
if (key !== 'data') { | |
this[key] = options[key] | |
} | |
} | |
} | |
if (this.originalMaxAge === undefined || this.originalMaxAge === null) { | |
this.originalMaxAge = this.maxAge | |
} | |
}; | |
/*! | |
* 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) { | |
if (ms && typeof ms !== 'number' && !(ms instanceof Date)) { | |
throw new TypeError('maxAge must be a number or Date') | |
} | |
if (ms instanceof Date) { | |
deprecate('maxAge as Date; pass number of milliseconds instead') | |
} | |
this.expires = typeof ms === 'number' | |
? 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 | |
, sameSite: this.sameSite | |
} | |
}, | |
/** | |
* 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; | |
} | |
}; | |