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.
151 lines
2.5 KiB
151 lines
2.5 KiB
5 years ago
|
/*!
|
||
|
* Connect - session - Cookie
|
||
|
* Copyright(c) 2010 Sencha Inc.
|
||
|
* Copyright(c) 2011 TJ Holowaychuk
|
||
|
* MIT Licensed
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* 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;
|
||
|
}
|
||
|
};
|