diff --git a/node/PadMessageHandler.js b/node/PadMessageHandler.js index b7c65d90..694ccf35 100644 --- a/node/PadMessageHandler.js +++ b/node/PadMessageHandler.js @@ -23,6 +23,7 @@ var padManager = require("./PadManager"); var Changeset = require("./Changeset"); var AttributePoolFactory = require("./AttributePoolFactory"); var authorManager = require("./AuthorManager"); +var readOnlyManager = require("./ReadOnlyManager"); /** * A associative array that translates a session to a pad @@ -507,6 +508,7 @@ function handleClientReady(client, message) var authorColorId; var pad; var historicalAuthorData = {}; + var readOnlyId; async.series([ //get all authordata of this new user @@ -543,6 +545,14 @@ function handleClientReady(client, message) pad = value; callback(err); }); + }, + function(callback) + { + readOnlyManager.getReadOnlyId(message.padId, function(err, value) + { + readOnlyId = value; + callback(err); + }); } ], callback); }); @@ -627,6 +637,7 @@ function handleClientReady(client, message) }, "numConnectedUsers": pad2sessions[message.padId].length, "isProPad": false, + "readOnlyId": readOnlyId, "serverTimestamp": new Date().getTime(), "globalPadId": message.padId, "userId": author, diff --git a/node/ReadOnlyManager.js b/node/ReadOnlyManager.js new file mode 100644 index 00000000..de2c6444 --- /dev/null +++ b/node/ReadOnlyManager.js @@ -0,0 +1,74 @@ +/** + * The ReadOnlyManager manages the database and rendering releated to read only pads + */ + +/* + * 2011 Peter 'Pita' Martischka + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var db = require("./db").db; +var async = require("async"); + +/** + * returns a read only id for a pad + * @param {String} padId the id of the pad + */ +exports.getReadOnlyId = function (padId, callback) +{ + var readOnlyId; + + async.waterfall([ + //check if there is a pad2readonly entry + function(callback) + { + db.get("pad2readonly:" + padId, callback); + }, + function(dbReadOnlyId, callback) + { + //there is no readOnly Entry in the database, let's create one + if(dbReadOnlyId == null) + { + readOnlyId = randomString(10); + + db.set("pad2readonly:" + padId, readOnlyId); + db.set("readonly2pad:" + readOnlyId, padId); + } + //there is a readOnly Entry in the database, let's take this one + else + { + readOnlyId = dbReadOnlyId; + } + + callback(); + } + ], function(err) + { + //return the results + callback(err, readOnlyId); + }) +} + +/** + * Generates a random String with the given length. Is needed to generate the read only ids + */ +function randomString(len) +{ + // use only numbers and lowercase letters + var pieces = []; + for(var i=0;iEmbed code:'); + $('#embedinput').val("