This repository has been archived on 2018-10-12. You can view files and clone it, but cannot push or open issues or pull requests.
node-task/node_modules/express-session/session/memory.js

152 lines
2.7 KiB
JavaScript
Raw Permalink Normal View History

2014-09-23 14:54:05 -04:00
/*!
* Connect - session - MemoryStore
* Copyright(c) 2010 Sencha Inc.
* Copyright(c) 2011 TJ Holowaychuk
* MIT Licensed
*/
/**
* Module dependencies.
*/
var Store = require('./store');
/**
* Shim setImmediate for node.js < 0.10
*/
/* istanbul ignore next */
var defer = typeof setImmediate === 'function'
? setImmediate
: function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }
/**
* Initialize a new `MemoryStore`.
*
* @api public
*/
var MemoryStore = module.exports = function MemoryStore() {
this.sessions = Object.create(null);
};
/**
* Inherit from `Store.prototype`.
*/
MemoryStore.prototype.__proto__ = Store.prototype;
/**
* Attempt to fetch session by the given `sid`.
*
* @param {String} sid
* @param {Function} fn
* @api public
*/
MemoryStore.prototype.get = function(sid, fn){
var self = this;
var sess = self.sessions[sid];
if (!sess) {
return defer(fn);
}
// parse
sess = JSON.parse(sess);
var expires = typeof sess.cookie.expires === 'string'
? new Date(sess.cookie.expires)
: sess.cookie.expires;
// destroy expired session
if (expires && expires <= Date.now()) {
return self.destroy(sid, fn);
}
defer(fn, null, sess);
};
/**
* Commit the given `sess` object associated with the given `sid`.
*
* @param {String} sid
* @param {Session} sess
* @param {Function} fn
* @api public
*/
MemoryStore.prototype.set = function(sid, sess, fn){
this.sessions[sid] = JSON.stringify(sess);
fn && defer(fn);
};
/**
* Destroy the session associated with the given `sid`.
*
* @param {String} sid
* @api public
*/
MemoryStore.prototype.destroy = function(sid, fn){
delete this.sessions[sid];
fn && defer(fn);
};
/**
* Invoke the given callback `fn` with all active sessions.
*
* @param {Function} fn
* @api public
*/
MemoryStore.prototype.all = function(fn){
var keys = Object.keys(this.sessions);
var now = Date.now();
var obj = Object.create(null);
var sess;
var sid;
for (var i = 0, len = keys.length; i < len; ++i) {
sid = keys[i];
// parse
sess = JSON.parse(this.sessions[sid]);
expires = typeof sess.cookie.expires === 'string'
? new Date(sess.cookie.expires)
: sess.cookie.expires;
if (!expires || expires > now) {
obj[sid] = sess;
}
}
fn && defer(fn, null, obj);
};
/**
* Clear all sessions.
*
* @param {Function} fn
* @api public
*/
MemoryStore.prototype.clear = function(fn){
this.sessions = {};
fn && defer(fn);
};
/**
* Fetch number of sessions.
*
* @param {Function} fn
* @api public
*/
MemoryStore.prototype.length = function(fn){
var len = Object.keys(this.sessions).length;
defer(fn, null, len);
};