summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-07-12 14:11:59 +0100
committerErik Johnston <erik@matrix.org>2017-07-12 14:47:18 +0100
commit26451a09eb938e6a72be3d77ff8c9e3fd2b33539 (patch)
treef34f0251972b1acb4014eeb34d437f8a902d831e
parentSimplify checking if admin (diff)
downloadsynapse-26451a09eb938e6a72be3d77ff8c9e3fd2b33539.tar.xz
Comments
-rw-r--r--synapse/groups/groups_server.py38
-rw-r--r--synapse/storage/group_server.py29
-rw-r--r--synapse/storage/schema/delta/43/group_server.sql17
3 files changed, 79 insertions, 5 deletions
diff --git a/synapse/groups/groups_server.py b/synapse/groups/groups_server.py
index ec45da2d7a..83dfcd0fd4 100644
--- a/synapse/groups/groups_server.py
+++ b/synapse/groups/groups_server.py
@@ -54,6 +54,12 @@ class GroupsServerHandler(object):
         """Check that the group is ours, and optionally if it exists.
 
         If group does exist then return group.
+
+        Args:
+            group_id (str)
+            and_exists (bool): whether to also check if group exists
+            and_is_admin (str): whether to also check if given str is a user_id
+                that is an admin
         """
         if not self.is_mine_id(group_id):
             raise SynapseError(400, "Group not on this server")
@@ -71,6 +77,14 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def get_group_summary(self, group_id, requester_user_id):
+        """Get the summary for a group as seen by requester_user_id.
+
+        The group summary consists of the profile of the room, and a curated
+        list of users and rooms. These list *may* be organised by role/category.
+        The roles/categories are ordered, and so are the users/rooms within them.
+
+        A user/room may appear in multiple roles/categories.
+        """
         yield self.check_group_is_ours(group_id, and_exists=True)
 
         is_user_in_group = yield self.store.is_user_in_group(requester_user_id, group_id)
@@ -133,6 +147,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def update_group_summary_room(self, group_id, user_id, room_id, category_id, content):
+        """Add/update a room to the group summary
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         order = content.get("order", None)
@@ -151,6 +167,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def delete_group_summary_room(self, group_id, user_id, room_id, category_id):
+        """Remove a room from the summary
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         yield self.store.remove_room_from_summary(
@@ -163,6 +181,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def get_group_categories(self, group_id, user_id):
+        """Get all categories in a group (as seen by user)
+        """
         yield self.check_group_is_ours(group_id, and_exists=True)
 
         categories = yield self.store.get_group_categories(
@@ -172,6 +192,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def get_group_category(self, group_id, user_id, category_id):
+        """Get a specific category in a group (as seen by user)
+        """
         yield self.check_group_is_ours(group_id, and_exists=True)
 
         res = yield self.store.get_group_category(
@@ -183,6 +205,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def update_group_category(self, group_id, user_id, category_id, content):
+        """Add/Update a group category
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         is_public = _parse_visibility_from_contents(content)
@@ -199,6 +223,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def delete_group_category(self, group_id, user_id, category_id):
+        """Delete a group category
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         yield self.store.remove_group_category(
@@ -210,6 +236,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def get_group_roles(self, group_id, user_id):
+        """Get all roles in a group (as seen by user)
+        """
         yield self.check_group_is_ours(group_id, and_exists=True)
 
         roles = yield self.store.get_group_roles(
@@ -219,6 +247,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def get_group_role(self, group_id, user_id, role_id):
+        """Get a specific role in a group (as seen by user)
+        """
         yield self.check_group_is_ours(group_id, and_exists=True)
 
         res = yield self.store.get_group_role(
@@ -229,6 +259,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def update_group_role(self, group_id, user_id, role_id, content):
+        """Add/update a role in a group
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         is_public = _parse_visibility_from_contents(content)
@@ -246,6 +278,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def delete_group_role(self, group_id, user_id, role_id):
+        """Remove role from group
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         yield self.store.remove_group_role(
@@ -258,6 +292,8 @@ class GroupsServerHandler(object):
     @defer.inlineCallbacks
     def update_group_summary_user(self, group_id, requester_user_id, user_id, role_id,
                                   content):
+        """Add/update a users entry in the group summary
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         order = content.get("order", None)
@@ -276,6 +312,8 @@ class GroupsServerHandler(object):
 
     @defer.inlineCallbacks
     def delete_group_summary_user(self, group_id, requester_user_id, user_id, role_id):
+        """Remove a user from the group summary
+        """
         yield self.check_group_is_ours(group_id, and_exists=True, and_is_admin=user_id)
 
         yield self.store.remove_user_from_summary(
diff --git a/synapse/storage/group_server.py b/synapse/storage/group_server.py
index f4818ff174..18bfaeda6e 100644
--- a/synapse/storage/group_server.py
+++ b/synapse/storage/group_server.py
@@ -22,6 +22,8 @@ from ._base import SQLBaseStore
 import ujson as json
 
 
+# The category ID for the "default" category. We don't store as null in the
+# database to avoid the fun of null != null
 _DEFAULT_CATEGORY_ID = "default"
 
 
@@ -70,6 +72,10 @@ class GroupServerStore(SQLBaseStore):
         )
 
     def get_rooms_for_summary_by_category(self, group_id, include_private=False):
+        """Get the rooms and categories that should be included in a summary request
+
+        Returns ([rooms], [categories])
+        """
         def _get_rooms_for_summary_txn(txn):
             keyvalues = {
                 "group_id": group_id,
@@ -134,6 +140,14 @@ class GroupServerStore(SQLBaseStore):
 
     def _add_room_to_summary_txn(self, txn, group_id, room_id, category_id, order,
                                  is_public):
+        """Add room to summary.
+
+        This automatically adds the room to the end of the list of rooms to be
+        included in the summary response. If a role is given then user will
+        be added under that category (the category will automatically be added tothe
+        the summary if a user is listed under that role in the summary).
+        """
+
         if category_id is None:
             category_id = _DEFAULT_CATEGORY_ID
         else:
@@ -278,6 +292,8 @@ class GroupServerStore(SQLBaseStore):
         defer.returnValue(category)
 
     def upsert_group_category(self, group_id, category_id, profile, is_public):
+        """Add/update room category for group
+        """
         insertion_values = {}
         update_values = {"category_id": category_id}  # This cannot be empty
 
@@ -348,6 +364,8 @@ class GroupServerStore(SQLBaseStore):
         defer.returnValue(role)
 
     def upsert_group_role(self, group_id, role_id, profile, is_public):
+        """Add/remove user role
+        """
         insertion_values = {}
         update_values = {"role_id": role_id}  # This cannot be empty
 
@@ -390,6 +408,13 @@ class GroupServerStore(SQLBaseStore):
 
     def _add_user_to_summary_txn(self, txn, group_id, user_id, role_id, order,
                                  is_public):
+        """Add user to summary.
+
+        This automatically adds the user to the end of the list of users to be
+        included in the summary response. If a role is given then user will
+        be added under that role (the role will automatically be added to the
+        summary if a user is listed under that role in the summary).
+        """
         if role_id is None:
             role_id = _DEFAULT_CATEGORY_ID
         else:
@@ -499,6 +524,10 @@ class GroupServerStore(SQLBaseStore):
         )
 
     def get_users_for_summary_by_role(self, group_id, include_private=False):
+        """Get the users and roles that should be included in a summary request
+
+        Returns ([users], [roles])
+        """
         def _get_users_for_summary_txn(txn):
             keyvalues = {
                 "group_id": group_id,
diff --git a/synapse/storage/schema/delta/43/group_server.sql b/synapse/storage/schema/delta/43/group_server.sql
index 3013b89b7e..472aab0a78 100644
--- a/synapse/storage/schema/delta/43/group_server.sql
+++ b/synapse/storage/schema/delta/43/group_server.sql
@@ -56,18 +56,21 @@ CREATE INDEX groups_rooms_g_idx ON group_rooms(group_id, room_id);
 CREATE INDEX groups_rooms_r_idx ON group_rooms(room_id);
 
 
+-- Rooms to include in the summary
 CREATE TABLE group_summary_rooms (
     group_id TEXT NOT NULL,
     room_id TEXT NOT NULL,
     category_id TEXT NOT NULL,
     room_order BIGINT NOT NULL,
-    is_public BOOLEAN NOT NULL,
+    is_public BOOLEAN NOT NULL, -- whether the room should be show to everyone
     UNIQUE (group_id, category_id, room_id, room_order),
     CHECK (room_order > 0)
 );
 
 CREATE UNIQUE INDEX group_summary_rooms_g_idx ON group_summary_rooms(group_id, room_id, category_id);
 
+
+-- Categories to include in the summary
 CREATE TABLE group_summary_room_categories (
     group_id TEXT NOT NULL,
     category_id TEXT NOT NULL,
@@ -76,25 +79,27 @@ CREATE TABLE group_summary_room_categories (
     CHECK (cat_order > 0)
 );
 
+-- The categories in the group
 CREATE TABLE group_room_categories (
     group_id TEXT NOT NULL,
     category_id TEXT NOT NULL,
     profile TEXT NOT NULL,
-    is_public BOOLEAN NOT NULL,
+    is_public BOOLEAN NOT NULL, -- whether the category should be show to everyone
     UNIQUE (group_id, category_id)
 );
 
-
+-- The users to include in the group summary
 CREATE TABLE group_summary_users (
     group_id TEXT NOT NULL,
     user_id TEXT NOT NULL,
     role_id TEXT NOT NULL,
     user_order BIGINT NOT NULL,
-    is_public BOOLEAN NOT NULL
+    is_public BOOLEAN NOT NULL  -- whether the user should be show to everyone
 );
 
 CREATE INDEX group_summary_users_g_idx ON group_summary_users(group_id);
 
+-- The roles to include in the group summary
 CREATE TABLE group_summary_roles (
     group_id TEXT NOT NULL,
     role_id TEXT NOT NULL,
@@ -103,11 +108,13 @@ CREATE TABLE group_summary_roles (
     CHECK (role_order > 0)
 );
 
+
+-- The roles in a groups
 CREATE TABLE group_roles (
     group_id TEXT NOT NULL,
     role_id TEXT NOT NULL,
     profile TEXT NOT NULL,
-    is_public BOOLEAN NOT NULL,
+    is_public BOOLEAN NOT NULL,  -- whether the role should be show to everyone
     UNIQUE (group_id, role_id)
 );