From 9fa52c0e66819fdf4651f231abe1c14cff59a5d1 Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Thu, 4 Aug 2011 19:20:14 +0100 Subject: [PATCH] added createPad --- node/db/API.js | 109 ++++++++++++++++++++++++++++--------- node/db/Pad.js | 10 +++- node/db/PadManager.js | 11 +++- node/handler/APIHandler.js | 4 +- 4 files changed, 102 insertions(+), 32 deletions(-) diff --git a/node/db/API.js b/node/db/API.js index 8d19dab3..611826d3 100644 --- a/node/db/API.js +++ b/node/db/API.js @@ -78,7 +78,7 @@ exports.listPads = function(groupID, callback) } /** -createPad(groupID, padName [, text]) creates a new pad in this group +createGroupPad(groupID, padName [, text]) creates a new pad in this group Example returns: @@ -86,7 +86,7 @@ Example returns: {code: 1, message:"pad does already exist", data: null} {code: 1, message:"There is no group for this groupID", data: null} */ -exports.createPad = function(groupID, padName, text, callback) +exports.createGroupPad = function(groupID, padName, text, callback) { } @@ -268,7 +268,7 @@ exports.getText = function(padID, rev, callback) } //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -316,22 +316,16 @@ Example returns: */ exports.setText = function(padID, text, callback) { - //check if text is a string - if(typeof text != "string") + //check the text + var textCheck = checkPadText(text); + if(textCheck != null) { - callback({stop: "text is not a string"}); - return; - } - - //check if text is less than 100k chars - if(text.length > 100000) - { - callback({stop: "text must be less than 100k chars"}) + callback(textCheck); return; } //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -362,7 +356,7 @@ Example returns: exports.getRevisionsCount = function(padID, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -374,6 +368,41 @@ exports.getRevisionsCount = function(padID, callback) }); } +/** +createPad(padName [, text]) creates a new pad in this group + +Example returns: + +{code: 0, message:"ok", data: null} +{code: 1, message:"pad does already exist", data: null} +*/ +exports.createPad = function(padID, text, callback) +{ + if(text) + { + //check the text + var textCheck = checkPadText(text); + if(textCheck != null) + { + callback(textCheck); + return; + } + } + + //ensure there is no $ in the padID + if(padID.indexOf("$") != -1) + { + callback({stop: "createPad can't create group pads"}); + return; + } + + //create pad + getPadSafe(padID, false, text, function(err) + { + callback(err); + }); +} + /** deletePad(padID) deletes a pad @@ -385,7 +414,7 @@ Example returns: exports.deletePad = function(padID, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -408,7 +437,7 @@ Example returns: exports.getReadOnlyID = function(padID, callback) { //we don't need the pad object, but this function does all the security stuff for us - getPadSafe(padID, function(err) + getPadSafe(padID, true, function(err) { if(err) { @@ -435,7 +464,7 @@ Example returns: exports.setPublicStatus = function(padID, publicStatus, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -458,7 +487,7 @@ Example returns: exports.getPublicStatus = function(padID, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -481,7 +510,7 @@ Example returns: exports.setPassword = function(padID, password, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -504,7 +533,7 @@ Example returns: exports.isPasswordProtected = function(padID, callback) { //get the pad - getPadSafe(padID, function(err, pad) + getPadSafe(padID, true, function(err, pad) { if(err) { @@ -526,9 +555,32 @@ function is_int(value) return (parseFloat(value) == parseInt(value)) && !isNaN(value) } -//gets a pad safe -function getPadSafe(padID, callback) +function checkPadText(text) { + //check if text is a string + if(typeof text != "string") + { + return {stop: "text is not a string"}; + } + + //check if text is less than 100k chars + if(text.length > 100000) + { + return {stop: "text must be less than 100k chars"}; + } + + return null; +} + +//gets a pad safe +function getPadSafe(padID, shouldExist, text, callback) +{ + if(typeof text == "function") + { + callback = text; + text = null; + } + //check if padID is a string if(typeof padID != "string") { @@ -551,15 +603,20 @@ function getPadSafe(padID, callback) { callback(err); } - //does not exists - else if(exists == false) + //does not exist, but should + else if(exists == false && shouldExist == true) { callback({stop: "padID does not exist"}); } + //does exists, but shouldn't + else if(exists == true && shouldExist == false) + { + callback({stop: "padID does already exist"}); + } //pad exists, let's get it else { - padManager.getPad(padID, callback); + padManager.getPad(padID, text, callback); } }); } diff --git a/node/db/Pad.js b/node/db/Pad.js index d8009870..982ba1c3 100644 --- a/node/db/Pad.js +++ b/node/db/Pad.js @@ -310,9 +310,15 @@ Class('Pad', { }); }, - init : function (callback) + init : function (text, callback) { var _this = this; + + //replace text with default text if text isn't set + if(text == null) + { + text = settings.defaultPadText; + } //try to load the pad db.get("pad:"+this.id, function(err, value) @@ -338,7 +344,7 @@ Class('Pad', { //this pad doesn't exist, so create it else { - var firstChangeset = Changeset.makeSplice("\n", 0, 0, exports.cleanText(settings.defaultPadText)); + var firstChangeset = Changeset.makeSplice("\n", 0, 0, exports.cleanText(text)); _this.appendRevision(firstChangeset, ''); } diff --git a/node/db/PadManager.js b/node/db/PadManager.js index ff39849f..c1b69bd5 100644 --- a/node/db/PadManager.js +++ b/node/db/PadManager.js @@ -31,11 +31,18 @@ globalPads = []; * @param id A String with the id of the pad * @param {Function} callback */ -exports.getPad = function(id, callback) +exports.getPad = function(id, text, callback) { if(!exports.isValidPadId(id)) throw new Error(id + " is not a valid padId"); + //make text an optional parameter + if(typeof text == "function") + { + callback = text; + text = null; + } + var pad = globalPads[id]; //return pad if its already loaded @@ -49,7 +56,7 @@ exports.getPad = function(id, callback) pad = new Pad(id); //initalize the pad - pad.init(function(err) + pad.init(text, function(err) { if(err) { diff --git a/node/handler/APIHandler.js b/node/handler/APIHandler.js index 15744374..6afe1173 100644 --- a/node/handler/APIHandler.js +++ b/node/handler/APIHandler.js @@ -39,7 +39,7 @@ var functions = { // "getMappedGroup4" : ["groupMapper"], // "deleteGroup" : ["groupID"], // "listPads" : ["groupID"], -// "createPad" : ["padName", "text"], + "createPad" : ["padID", "text"], // "createGroupPad" : ["groupID", "padName", "text"], // "createAuthor" : ["name"], // "getMappedAuthor4" : ["authorMapper" , "name"], @@ -54,7 +54,7 @@ var functions = { "setText" : ["padID", "text"], "getRevisionsCount" : ["padID"], // "deletePad" : ["padID"], - "getReadOnlyID" : ["padID"], + "getReadOnlyID" : ["padID"] // "setPublicStatus" : ["padID", "publicStatus"], // "getPublicStatus" : ["padID"], // "setPassword" : ["padID", "password"],