diff options
author | John McLear <john@mclear.co.uk> | 2013-02-13 01:33:22 +0000 |
---|---|---|
committer | John McLear <john@mclear.co.uk> | 2013-02-13 01:33:22 +0000 |
commit | 5c9d081391183deee1eccccea88d194ae5952341 (patch) | |
tree | 667e237ebc22bde6bc9ab76215dffa94be474936 /src/node/db | |
parent | 14dca926927b0c68e0498068f6163e48d3ea5468 (diff) | |
download | etherpad-lite-5c9d081391183deee1eccccea88d194ae5952341.zip |
Begin supporting the database but still have a problem where it generates new key on restart...
Diffstat (limited to 'src/node/db')
-rw-r--r-- | src/node/db/SessionManager.js | 2 | ||||
-rw-r--r-- | src/node/db/SessionStore.js | 82 |
2 files changed, 83 insertions, 1 deletions
diff --git a/src/node/db/SessionManager.js b/src/node/db/SessionManager.js index 5ce4f748..60e0a7ac 100644 --- a/src/node/db/SessionManager.js +++ b/src/node/db/SessionManager.js @@ -1,5 +1,5 @@ /** - * The Session Manager provides functions to manage session in the database + * The Session Manager provides functions to manage session in the database, it only provides session management for sessions created by the API */ /* diff --git a/src/node/db/SessionStore.js b/src/node/db/SessionStore.js new file mode 100644 index 00000000..09ea7333 --- /dev/null +++ b/src/node/db/SessionStore.js @@ -0,0 +1,82 @@ + /* + * Stores session data in the database + * Source; https://github.com/edy-b/SciFlowWriter/blob/develop/available_plugins/ep_sciflowwriter/db/DirtyStore.js + * This is not used for authors that are created via the API at current + */ + +var Store = require('ep_etherpad-lite/node_modules/connect/lib/middleware/session/store'), + utils = require('ep_etherpad-lite/node_modules/connect/lib/utils'), + Session = require('ep_etherpad-lite/node_modules/connect/lib/middleware/session/session'), + db = require('ep_etherpad-lite/node/db/DB').db, + log4js = require('ep_etherpad-lite/node_modules/log4js'), + messageLogger = log4js.getLogger("SessionStore"); + +var SessionStore = module.exports = function SessionStore() {}; + +SessionStore.prototype.__proto__ = Store.prototype; + +SessionStore.prototype.get = function(sid, fn){ + messageLogger.debug('GET ' + sid); + var self = this; + db.get("sessionstorage:" + sid, function (err, sess) + { + if (sess) { + sess.cookie.expires = 'string' == typeof sess.cookie.expires ? new Date(sess.cookie.expires) : sess.cookie.expires; + if (!sess.cookie.expires || new Date() < expires) { + fn(null, sess); + } else { + self.destroy(sid, fn); + } + } else { + fn(); + } + }); +}; + +SessionStore.prototype.set = function(sid, sess, fn){ + messageLogger.debug('SET ' + sid); + db.set("sessionstorage:" + sid, sess); + process.nextTick(function(){ + if(fn) fn(); + }); +}; + +SessionStore.prototype.destroy = function(sid, fn){ + messageLogger.debug('DESTROY ' + sid); + db.remove("sessionstorage:" + sid); + process.nextTick(function(){ + if(fn) fn(); + }); +}; + +SessionStore.prototype.all = function(fn){ + messageLogger.debug('ALL'); + var sessions = []; + db.forEach(function(key, value){ + if (key.substr(0,15) === "sessionstorage:") { + sessions.push(value); + } + }); + fn(null, sessions); +}; + +SessionStore.prototype.clear = function(fn){ + messageLogger.debug('CLEAR'); + db.forEach(function(key, value){ + if (key.substr(0,15) === "sessionstorage:") { + db.db.remove("session:" + key); + } + }); + if(fn) fn(); +}; + +SessionStore.prototype.length = function(fn){ + messageLogger.debug('LENGTH'); + var i = 0; + db.forEach(function(key, value){ + if (key.substr(0,15) === "sessionstorage:") { + i++; + } + }); + fn(null, i); +}; |