Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / express-session / session / memory.js
1 /*!
2  * express-session
3  * Copyright(c) 2010 Sencha Inc.
4  * Copyright(c) 2011 TJ Holowaychuk
5  * Copyright(c) 2015 Douglas Christopher Wilson
6  * MIT Licensed
7  */
8
9 /**
10  * Module dependencies.
11  * @private
12  */
13
14 var Store = require('./store')
15 var util = require('util')
16
17 /**
18  * Shim setImmediate for node.js < 0.10
19  * @private
20  */
21
22 /* istanbul ignore next */
23 var defer = typeof setImmediate === 'function'
24   ? setImmediate
25   : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }
26
27 /**
28  * Module exports.
29  */
30
31 module.exports = MemoryStore
32
33 /**
34  * A session store in memory.
35  * @public
36  */
37
38 function MemoryStore() {
39   Store.call(this)
40   this.sessions = Object.create(null)
41 }
42
43 /**
44  * Inherit from Store.
45  */
46
47 util.inherits(MemoryStore, Store)
48
49 /**
50  * Get all active sessions.
51  *
52  * @param {function} callback
53  * @public
54  */
55
56 MemoryStore.prototype.all = function all(callback) {
57   var sessionIds = Object.keys(this.sessions)
58   var sessions = Object.create(null)
59
60   for (var i = 0; i < sessionIds.length; i++) {
61     var sessionId = sessionIds[i]
62     var session = getSession.call(this, sessionId)
63
64     if (session) {
65       sessions[sessionId] = session;
66     }
67   }
68
69   callback && defer(callback, null, sessions)
70 }
71
72 /**
73  * Clear all sessions.
74  *
75  * @param {function} callback
76  * @public
77  */
78
79 MemoryStore.prototype.clear = function clear(callback) {
80   this.sessions = Object.create(null)
81   callback && defer(callback)
82 }
83
84 /**
85  * Destroy the session associated with the given session ID.
86  *
87  * @param {string} sessionId
88  * @public
89  */
90
91 MemoryStore.prototype.destroy = function destroy(sessionId, callback) {
92   delete this.sessions[sessionId]
93   callback && defer(callback)
94 }
95
96 /**
97  * Fetch session by the given session ID.
98  *
99  * @param {string} sessionId
100  * @param {function} callback
101  * @public
102  */
103
104 MemoryStore.prototype.get = function get(sessionId, callback) {
105   defer(callback, null, getSession.call(this, sessionId))
106 }
107
108 /**
109  * Commit the given session associated with the given sessionId to the store.
110  *
111  * @param {string} sessionId
112  * @param {object} session
113  * @param {function} callback
114  * @public
115  */
116
117 /**
118  * Get number of active sessions.
119  *
120  * @param {function} callback
121  * @public
122  */
123
124 MemoryStore.prototype.length = function length(callback) {
125   this.all(function (err, sessions) {
126     if (err) return callback(err)
127     callback(null, Object.keys(sessions).length)
128   })
129 }
130
131 MemoryStore.prototype.set = function set(sessionId, session, callback) {
132   this.sessions[sessionId] = JSON.stringify(session)
133   callback && defer(callback)
134 }
135
136 /**
137  * Touch the given session object associated with the given session ID.
138  *
139  * @param {string} sessionId
140  * @param {object} session
141  * @param {function} callback
142  * @public
143  */
144
145 MemoryStore.prototype.touch = function touch(sessionId, session, callback) {
146   var currentSession = getSession.call(this, sessionId)
147
148   if (currentSession) {
149     // update expiration
150     currentSession.cookie = session.cookie
151     this.sessions[sessionId] = JSON.stringify(currentSession)
152   }
153
154   callback && defer(callback)
155 }
156
157 /**
158  * Get session from the store.
159  * @private
160  */
161
162 function getSession(sessionId) {
163   var sess = this.sessions[sessionId]
164
165   if (!sess) {
166     return
167   }
168
169   // parse
170   sess = JSON.parse(sess)
171
172   var expires = typeof sess.cookie.expires === 'string'
173     ? new Date(sess.cookie.expires)
174     : sess.cookie.expires
175
176   // destroy expired session
177   if (expires && expires <= Date.now()) {
178     delete this.sessions[sessionId]
179     return
180   }
181
182   return sess
183 }