summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn McLear <john@mclear.co.uk>2012-09-18 15:36:19 -0700
committerJohn McLear <john@mclear.co.uk>2012-09-18 15:36:19 -0700
commit0883043eb99e00f9495c56bc78330f79ee55a8c7 (patch)
tree779f1be111adfbb9bb5705309cdffef0b730f839
parentf81a11022980e4fb1d84a290de42d97500e24548 (diff)
parentf8f002adc0ec152b15d67bca9b5288d6b46196e1 (diff)
downloadetherpad-lite-0883043eb99e00f9495c56bc78330f79ee55a8c7.zip
Merge pull request #1014 from marcelklehr/feature/list-all-groups
Add listAllGroups API endpoint
-rw-r--r--doc/api/http_api.md4
-rw-r--r--doc/database.md3
-rw-r--r--src/node/db/API.js1
-rw-r--r--src/node/db/GroupManager.js70
-rw-r--r--src/node/handler/APIHandler.js1
5 files changed, 78 insertions, 1 deletions
diff --git a/doc/api/http_api.md b/doc/api/http_api.md
index 058a2ba6..3afab498 100644
--- a/doc/api/http_api.md
+++ b/doc/api/http_api.md
@@ -135,6 +135,10 @@ Pads can belong to a group. The padID of grouppads is starting with a groupID li
* `{code: 1, message:"pad does already exist", data: null}`
* `{code: 1, message:"groupID does not exist", data: null}`
+* **listAllGroups()** lists all existing groups<br><br>*Example returns:*
+ * `{code: 0, message:"ok", data: {groupIDs: ["g.mKjkmnAbSMtCt8eL", "g.3ADWx6sbGuAiUmCy"]}}`
+ * `{code: 0, message:"ok", data: {groupIDs: []}}`
+
### Author
These authors are bound to the attributes the users choose (color and name).
diff --git a/doc/database.md b/doc/database.md
index 2e06e206..de3e9f54 100644
--- a/doc/database.md
+++ b/doc/database.md
@@ -2,6 +2,9 @@
## Keys and their values
+### groups
+A list of all existing groups (a JSON object with groupIDs as keys and `1` as values).
+
### pad:$PADID
Saves all informations about pads
diff --git a/src/node/db/API.js b/src/node/db/API.js
index c5caae0b..4979e8c6 100644
--- a/src/node/db/API.js
+++ b/src/node/db/API.js
@@ -35,6 +35,7 @@ var cleanText = require("./Pad").cleanText;
/**GROUP FUNCTIONS*****/
/**********************/
+exports.listAllGroups = groupManager.listAllGroups;
exports.createGroup = groupManager.createGroup;
exports.createGroupIfNotExistsFor = groupManager.createGroupIfNotExistsFor;
exports.deleteGroup = groupManager.deleteGroup;
diff --git a/src/node/db/GroupManager.js b/src/node/db/GroupManager.js
index bd19507f..81b0cb9e 100644
--- a/src/node/db/GroupManager.js
+++ b/src/node/db/GroupManager.js
@@ -26,6 +26,24 @@ var db = require("./DB").db;
var async = require("async");
var padManager = require("./PadManager");
var sessionManager = require("./SessionManager");
+
+exports.listAllGroups = function(callback) {
+ db.get("groups", function (err, groups) {
+ if(ERR(err, callback)) return;
+
+ // there are no groups
+ if(groups == null) {
+ callback(null, {groupIDs: []});
+ return;
+ }
+
+ var groupIDs = [];
+ for ( var groupID in groups ) {
+ groupIDs.push(groupID);
+ }
+ callback(null, {groupIDs: groupIDs});
+ });
+}
exports.deleteGroup = function(groupID, callback)
{
@@ -105,6 +123,39 @@ exports.deleteGroup = function(groupID, callback)
db.remove("group2sessions:" + groupID);
db.remove("group:" + groupID);
callback();
+ },
+ //unlist the group
+ function(callback)
+ {
+ exports.listAllGroups(function(err, groups) {
+ if(ERR(err, callback)) return;
+ groups = groups? groups.groupIDs : [];
+
+ // it's not listed
+ if(groups.indexOf(groupID) == -1) {
+ callback();
+ return;
+ }
+
+ groups.splice(groups.indexOf(groupID), 1);
+
+ // store empty groupe list
+ if(groups.length == 0) {
+ db.set("groups", {});
+ callback();
+ return;
+ }
+
+ // regenerate group list
+ var newGroups = {};
+ async.forEach(groups, function(group, cb) {
+ newGroups[group] = 1;
+ cb();
+ },function() {
+ db.set("groups", newGroups);
+ callback();
+ });
+ });
}
], function(err)
{
@@ -130,7 +181,24 @@ exports.createGroup = function(callback)
//create the group
db.set("group:" + groupID, {pads: {}});
- callback(null, {groupID: groupID});
+
+ //list the group
+ exports.listAllGroups(function(err, groups) {
+ if(ERR(err, callback)) return;
+ groups = groups? groups.groupIDs : [];
+
+ groups.push(groupID);
+
+ // regenerate group list
+ var newGroups = {};
+ async.forEach(groups, function(group, cb) {
+ newGroups[group] = 1;
+ cb();
+ },function() {
+ db.set("groups", newGroups);
+ callback(null, {groupID: groupID});
+ });
+ });
}
exports.createGroupIfNotExistsFor = function(groupMapper, callback)
diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js
index 2af7afef..f99762ce 100644
--- a/src/node/handler/APIHandler.js
+++ b/src/node/handler/APIHandler.js
@@ -101,6 +101,7 @@ var version =
, "getAuthorName" : ["authorID"]
, "padUsers" : ["padID"]
, "sendClientsMessage" : ["padID", "msg"]
+ , "listAllGroups" : []
}
};