diff --git a/src/node/db/API.js b/src/node/db/API.js index 3955d495..a0a84e32 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -74,6 +74,92 @@ exports.listSessionsOfAuthor = sessionManager.listSessionsOfAuthor; /**PAD CONTENT FUNCTIONS*/ /************************/ +/** +getAttributePool(padID) returns the attribute pool of a pad + +*/ +exports.getAttributePool = function (padID, callback) +{ + getPadSafe(padID, true, function(err, pad) + { + if (ERR(err, callback)) return; + callbalk(null, {pool: pad.pool}); + }); +} + +/** +getRevisionChangeset (padID, [rev]) + +*/ +exports.getRevisionChangeset = function(padID, rev, callback) +{ + // check if rev is set + if (typeof rev === "function") + { + callback = rev; + rev = undefined; + } + + // check if rev is a number + if (rev !== undefined && typeof rev !== "number") + { + // try to parse the number + if (!isNaN(parseInt(rev)) + { + rev = parseInt(rev); + } + else + { + callback(new customError("rev is not a number", "apierror")); + return; + } + } + + // ensure this is not a negative number + if (rev !== undefined && rev < 0) + { + callback(new customError("rev is not a negative number", "apierror")); + return; + } + + // ensure this is not a float value + if (rev !== undefined && !is_int(rev)) + { + callback(new customError("rev is a float value", "apierror")); + return; + } + + // get the pad + getPadSafe(padID, true, function(err, pad) + { + if(ERR(err, callback)) return; + + //the client asked for a special revision + if(rev !== undefined) + { + //check if this is a valid revision + if(rev > pad.getHeadRevisionNumber()) + { + callback(new customError("rev is higher than the head revision of the pad","apierror")); + return; + } + + //get the changeset for this revision + pad.getRevisionChangeset(rev, function(err, changeset) + { + if(ERR(err, callback)) return; + + callback(null, changeset); + }) + } + //the client wants the latest changeset, lets return it to him + else + { + callback(null, {"changeset": pad.getRevisionChangeset(pad.getHeadRevisionNumber())}); + } + }); +} + /** getText(padID, [rev]) returns the text of a pad diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index 4b7dd951..d4ea4f2c 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -180,7 +180,47 @@ var version = , "deleteGroup" : ["groupID"] , "listPads" : ["groupID"] , "listAllPads" : [] - , "createDiffHTML" : ["padID", "startRev", "endRev"] + , "createDiffHTML" : ["padID", "startRev", "endRev"] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getRevisionsCount" : ["padID"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "getReadOnlyID" : ["padID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + , "getChatHistory" : ["padID"] + , "getChatHistory" : ["padID", "start", "end"] + , "getChatHead" : ["padID"] + } +, "1.2.8": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createDiffHTML" : ["padID", "startRev", "endRev"] , "createPad" : ["padID", "text"] , "createGroupPad" : ["groupID", "padName", "text"] , "createAuthor" : ["name"]