UNPKG

2.66 kBJavaScriptView Raw
1/*!
2 * Connect - session - Cookie
3 * Copyright(c) 2010 Sencha Inc.
4 * Copyright(c) 2011 TJ Holowaychuk
5 * MIT Licensed
6 */
7
8'use strict';
9
10/**
11 * Module dependencies.
12 */
13
14var cookie = require('cookie')
15var deprecate = require('depd')('express-session')
16
17/**
18 * Initialize a new `Cookie` with the given `options`.
19 *
20 * @param {IncomingMessage} req
21 * @param {Object} options
22 * @api private
23 */
24
25var Cookie = module.exports = function Cookie(options) {
26 this.path = '/';
27 this.maxAge = null;
28 this.httpOnly = true;
29
30 if (options) {
31 if (typeof options !== 'object') {
32 throw new TypeError('argument options must be a object')
33 }
34
35 for (var key in options) {
36 if (key !== 'data') {
37 this[key] = options[key]
38 }
39 }
40 }
41
42 if (this.originalMaxAge === undefined || this.originalMaxAge === null) {
43 this.originalMaxAge = this.maxAge
44 }
45};
46
47/*!
48 * Prototype.
49 */
50
51Cookie.prototype = {
52
53 /**
54 * Set expires `date`.
55 *
56 * @param {Date} date
57 * @api public
58 */
59
60 set expires(date) {
61 this._expires = date;
62 this.originalMaxAge = this.maxAge;
63 },
64
65 /**
66 * Get expires `date`.
67 *
68 * @return {Date}
69 * @api public
70 */
71
72 get expires() {
73 return this._expires;
74 },
75
76 /**
77 * Set expires via max-age in `ms`.
78 *
79 * @param {Number} ms
80 * @api public
81 */
82
83 set maxAge(ms) {
84 if (ms && typeof ms !== 'number' && !(ms instanceof Date)) {
85 throw new TypeError('maxAge must be a number or Date')
86 }
87
88 if (ms instanceof Date) {
89 deprecate('maxAge as Date; pass number of milliseconds instead')
90 }
91
92 this.expires = typeof ms === 'number'
93 ? new Date(Date.now() + ms)
94 : ms;
95 },
96
97 /**
98 * Get expires max-age in `ms`.
99 *
100 * @return {Number}
101 * @api public
102 */
103
104 get maxAge() {
105 return this.expires instanceof Date
106 ? this.expires.valueOf() - Date.now()
107 : this.expires;
108 },
109
110 /**
111 * Return cookie data object.
112 *
113 * @return {Object}
114 * @api private
115 */
116
117 get data() {
118 return {
119 originalMaxAge: this.originalMaxAge,
120 partitioned: this.partitioned,
121 priority: this.priority
122 , expires: this._expires
123 , secure: this.secure
124 , httpOnly: this.httpOnly
125 , domain: this.domain
126 , path: this.path
127 , sameSite: this.sameSite
128 }
129 },
130
131 /**
132 * Return a serialized cookie string.
133 *
134 * @return {String}
135 * @api public
136 */
137
138 serialize: function(name, val){
139 return cookie.serialize(name, val, this.data);
140 },
141
142 /**
143 * Return JSON representation of this cookie.
144 *
145 * @return {Object}
146 * @api private
147 */
148
149 toJSON: function(){
150 return this.data;
151 }
152};