| |
| /*! |
| * Connect - session - Store |
| * Copyright(c) 2010 Sencha Inc. |
| * Copyright(c) 2011 TJ Holowaychuk |
| * MIT Licensed |
| */ |
| |
| /** |
| * Module dependencies. |
| */ |
| |
| var EventEmitter = require('events').EventEmitter |
| , Session = require('./session') |
| , Cookie = require('./cookie') |
| , utils = require('../../utils'); |
| |
| /** |
| * Initialize abstract `Store`. |
| * |
| * @api private |
| */ |
| |
| var Store = module.exports = function Store(options){}; |
| |
| /** |
| * Inherit from `EventEmitter.prototype`. |
| */ |
| |
| Store.prototype.__proto__ = EventEmitter.prototype; |
| |
| /** |
| * Re-generate the given requests's session. |
| * |
| * @param {IncomingRequest} req |
| * @return {Function} fn |
| * @api public |
| */ |
| |
| Store.prototype.regenerate = function(req, fn){ |
| var self = this; |
| this.destroy(req.sessionID, function(err){ |
| self.generate(req); |
| fn(err); |
| }); |
| }; |
| |
| /** |
| * Load a `Session` instance via the given `sid` |
| * and invoke the callback `fn(err, sess)`. |
| * |
| * @param {String} sid |
| * @param {Function} fn |
| * @api public |
| */ |
| |
| Store.prototype.load = function(sid, fn){ |
| var self = this; |
| this.get(sid, function(err, sess){ |
| if (err) return fn(err); |
| if (!sess) return fn(); |
| var req = { sessionID: sid, sessionStore: self }; |
| sess = self.createSession(req, sess, false); |
| fn(null, sess); |
| }); |
| }; |
| |
| /** |
| * Create session from JSON `sess` data. |
| * |
| * @param {IncomingRequest} req |
| * @param {Object} sess |
| * @return {Session} |
| * @api private |
| */ |
| |
| Store.prototype.createSession = function(req, sess, update){ |
| var expires = sess.cookie.expires |
| , orig = sess.cookie.originalMaxAge |
| , update = null == update ? true : false; |
| sess.cookie = new Cookie(sess.cookie); |
| if ('string' == typeof expires) sess.cookie.expires = new Date(expires); |
| sess.cookie.originalMaxAge = orig; |
| req.session = new Session(req, sess); |
| if (update) req.session.resetLastAccess(); |
| return req.session; |
| }; |