From 4b48380a2f7e5cc16f40b503d6698724d2c4883a Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Tue, 9 Aug 2011 16:45:49 +0100 Subject: [PATCH] added createSession and getSessionInfo --- node/db/API.js | 11 +- node/db/AuthorManager.js | 12 ++ node/db/SessionManager.js | 279 +++++++++++++++++++++++++++++++++++++ node/handler/APIHandler.js | 4 +- 4 files changed, 296 insertions(+), 10 deletions(-) diff --git a/node/db/API.js b/node/db/API.js index f9d1ec17..a8c0ec03 100644 --- a/node/db/API.js +++ b/node/db/API.js @@ -23,6 +23,7 @@ var padMessageHandler = require("../handler/PadMessageHandler"); var readOnlyManager = require("./ReadOnlyManager"); var groupManager = require("./GroupManager"); var authorManager = require("./AuthorManager"); +var sessionManager = require("./SessionManager"); var async = require("async"); /**********************/ @@ -118,10 +119,7 @@ Example returns: {code: 1, message:"authorID doesn't exist", data: null} {code: 1, message:"validUntil is in the past", data: null} */ -exports.createSession = function(groupID, authorID, validUntil, callback) -{ - -} +exports.createSession = sessionManager.createSession; /** deleteSession(sessionID) deletes a session @@ -144,10 +142,7 @@ Example returns: {code: 0, message:"ok", data: {authorID: 5, groupID: 7, validUntil: 1312201246}} {code: 1, message:"sessionID does not exist", data: null} */ -exports.getSessionInfo = function(sessionID, callback) -{ - -} +exports.getSessionInfo = sessionManager.getSessionInfo; /** listSessionsOfGroup(groupID) returns all sessions of a group diff --git a/node/db/AuthorManager.js b/node/db/AuthorManager.js index abb44151..5354d48e 100644 --- a/node/db/AuthorManager.js +++ b/node/db/AuthorManager.js @@ -21,6 +21,18 @@ var db = require("./DB").db; var async = require("async"); +/** + * Checks if the author exists + */ +exports.doesAuthorExists = function (authorID, callback) +{ + //check if the database entry of this author exists + db.get("globalAuthor:" + authorID, function (err, author) + { + callback(err, author != null); + }); +} + /** * Returns the AuthorID for a token. * @param {String} token The token diff --git a/node/db/SessionManager.js b/node/db/SessionManager.js index f2538911..6663d7d2 100644 --- a/node/db/SessionManager.js +++ b/node/db/SessionManager.js @@ -17,3 +17,282 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +var db = require("./DB").db; +var async = require("async"); +var groupMangager = require("./GroupManager"); +var authorMangager = require("./AuthorManager"); + +exports.doesSessionExist = function(sessionID, callback) +{ + //check if the database entry of this session exists + db.get("session:" + sessionID, function (err, session) + { + callback(err, session != null); + }); +} + +/** + * Creates a new session between an author and a group + */ +exports.createSession = function(groupID, authorID, validUntil, callback) +{ + var sessionID; + + async.series([ + //check if group exists + function(callback) + { + groupMangager.doesGroupExist(groupID, function(err, exists) + { + //error + if(err) + { + callback(err); + } + //group does not exist + else if(exists == false) + { + callback({stop: "groupID does not exist"}); + } + //everything is fine, continue + else + { + callback(); + } + }); + }, + //check if author exists + function(callback) + { + authorMangager.doesAuthorExists(authorID, function(err, exists) + { + //error + if(err) + { + callback(err); + } + //author does not exist + else if(exists == false) + { + callback({stop: "authorID does not exist"}); + } + //everything is fine, continue + else + { + callback(); + } + }); + }, + //check validUntil and create the session db entry + function(callback) + { + //check if validUntil is a number + if(typeof validUntil != "number") + { + //try to parse the number + if(!isNaN(parseInt(validUntil))) + { + validUntil = parseInt(validUntil); + } + else + { + callback({stop: "validUntil is not a number"}); + return; + } + } + + //ensure this is not a negativ number + if(validUntil < 0) + { + callback({stop: "validUntil is a negativ number"}); + return; + } + + //ensure this is not a float value + if(!is_int(validUntil)) + { + callback({stop: "validUntil is a float value"}); + return; + } + + //check if validUntil is in the future + if(new Date().getTime()/1000 > validUntil) + { + callback({stop: "validUntil is in the past"}); + return; + } + + //generate sessionID + sessionID = "s." + randomString(16); + + //set the session into the database + db.set("session:" + sessionID, {"groupID": groupID, "authorID": authorID, "validUntil": validUntil}); + + callback(); + }, + //set the group2sessions entry + function(callback) + { + //get the entry + db.get("group2sessions:" + groupID, function(err, group2sessions) + { + //did a error happen? + if(err) + { + callback(err); + return; + } + + //the entry doesn't exist so far, let's create it + if(group2sessions == null) + { + group2sessions = {sessions : {}}; + } + + //add the entry for this session + group2sessions.sessions[sessionID] = 1; + + callback(); + }); + }, + //set the author2sessions entry + function(callback) + { + //get the entry + db.get("author2sessions:" + authorID, function(err, author2sessions) + { + //did a error happen? + if(err) + { + callback(err); + return; + } + + //the entry doesn't exist so far, let's create it + if(author2sessions == null) + { + author2sessions = {sessions : {}}; + } + + //add the entry for this session + author2sessions.sessions[sessionID] = 1; + + callback(); + }); + } + ], function(err) + { + //return error and sessionID + callback(err, {sessionID: sessionID}); + }) +} + +exports.getSessionInfo = function(sessionID, callback) +{ + //check if the database entry of this session exists + db.get("session:" + sessionID, function (err, session) + { + //error + if(err) + { + callback(err); + } + //session does not exists + else if(session == null) + { + callback({stop: "sessionID does not exist"}) + } + //everything is fine, return the sessioninfos + else + { + callback(null, session); + } + }); +} + +/** + * Deletes a session + */ +exports.deleteSession = function(sessionID, callback) +{ + //check if session exits + //delete session + //delete group2sessions + //delete author2sessions +} + +/** +returns all sessions of a group + +Example returns: + +{code: 0, message:"ok", data: {32: {authorID: 5, groupID: 7, validUntil: 1312201246}, 53: {authorID: 3, groupID: 2, validUntil: 1312201216}}} +{code: 1, message:"groupID does not exist", data: null} +*/ +exports.listSessionsOfGroup = function(groupID, callback) +{ + //check if group exists + //get the group2sessions entry +} + +/** +listSessionsOfAuthor(authorID) returns all sessions of an author + +Example returns: + +{code: 0, message:"ok", data: {32: {authorID: 5, groupID: 7, validUntil: 1312201246}, 53: {authorID: 3, groupID: 2, validUntil: 1312201216}}} +{code: 1, message:"authorID does not exist", data: null} +*/ +exports.listSessionsOfAuthor = function(authorID, callback) +{ + //check if author exists + //get the author2sessions entry +} + +/** +deleteAllSessionsOfGroup(groupID) deletes all sessions of a group + +Example returns: + +{code: 0, message:"ok", data: null} +{code: 1, message:"groupID does not exist", data: null} +*/ +exports.deleteAllSessionsOfGroup = function(groupID, callback) +{ + //call listsessionsofgroup + //foreach the group and delete the sessions +} + +/** +deleteAllSessionsOfAuthor(authorID) deletes all sessions of an author + +Example returns: + +{code: 0, message:"ok", data: null} +{code: 1, message:"authorID does not exist", data: null} +*/ +exports.deleteAllSessionsOfAuthor = function(authorID, callback) +{ + //call listsessionsofauthor + //foreach the group and delete the sessions +} + +/** + * Generates a random String with the given length. Is needed to generate the SessionIDs + */ +function randomString(len) +{ + // use only numbers and lowercase letters + var pieces = []; + for(var i=0;i