summaryrefslogtreecommitdiff
path: root/src/node/db
diff options
context:
space:
mode:
authorJohn McLear <john@mclear.co.uk>2013-02-13 01:33:22 +0000
committerJohn McLear <john@mclear.co.uk>2013-02-13 01:33:22 +0000
commit5c9d081391183deee1eccccea88d194ae5952341 (patch)
tree667e237ebc22bde6bc9ab76215dffa94be474936 /src/node/db
parent14dca926927b0c68e0498068f6163e48d3ea5468 (diff)
downloadetherpad-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.js2
-rw-r--r--src/node/db/SessionStore.js82
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);
+};