Merge pull request #2382 from matrix-org/erikj/group_privilege
Include users membership in group in summary API
This commit is contained in:
commit
ebbaae5526
|
@ -130,6 +130,10 @@ class GroupsServerHandler(object):
|
||||||
|
|
||||||
users.sort(key=lambda e: e.get("order", 0))
|
users.sort(key=lambda e: e.get("order", 0))
|
||||||
|
|
||||||
|
membership_info = yield self.store.get_users_membership_info_in_group(
|
||||||
|
group_id, requester_user_id,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue({
|
defer.returnValue({
|
||||||
"profile": profile,
|
"profile": profile,
|
||||||
"users_section": {
|
"users_section": {
|
||||||
|
@ -142,6 +146,7 @@ class GroupsServerHandler(object):
|
||||||
"categories": categories,
|
"categories": categories,
|
||||||
"total_room_count_estimate": 0, # TODO
|
"total_room_count_estimate": 0, # TODO
|
||||||
},
|
},
|
||||||
|
"user": membership_info,
|
||||||
})
|
})
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
|
|
@ -152,6 +152,18 @@ class GroupServerStore(SQLBaseStore):
|
||||||
an order of 1 will put the room first. Otherwise, the room gets
|
an order of 1 will put the room first. Otherwise, the room gets
|
||||||
added to the end.
|
added to the end.
|
||||||
"""
|
"""
|
||||||
|
room_in_group = self._simple_select_one_onecol_txn(
|
||||||
|
txn,
|
||||||
|
table="group_rooms",
|
||||||
|
keyvalues={
|
||||||
|
"group_id": group_id,
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
|
retcol="room_id",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
if not room_in_group:
|
||||||
|
raise SynapseError(400, "room not in group")
|
||||||
|
|
||||||
if category_id is None:
|
if category_id is None:
|
||||||
category_id = _DEFAULT_CATEGORY_ID
|
category_id = _DEFAULT_CATEGORY_ID
|
||||||
|
@ -426,6 +438,19 @@ class GroupServerStore(SQLBaseStore):
|
||||||
an order of 1 will put the user first. Otherwise, the user gets
|
an order of 1 will put the user first. Otherwise, the user gets
|
||||||
added to the end.
|
added to the end.
|
||||||
"""
|
"""
|
||||||
|
user_in_group = self._simple_select_one_onecol_txn(
|
||||||
|
txn,
|
||||||
|
table="group_users",
|
||||||
|
keyvalues={
|
||||||
|
"group_id": group_id,
|
||||||
|
"user_id": user_id,
|
||||||
|
},
|
||||||
|
retcol="user_id",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
if not user_in_group:
|
||||||
|
raise SynapseError(400, "user not in group")
|
||||||
|
|
||||||
if role_id is None:
|
if role_id is None:
|
||||||
role_id = _DEFAULT_ROLE_ID
|
role_id = _DEFAULT_ROLE_ID
|
||||||
else:
|
else:
|
||||||
|
@ -618,7 +643,7 @@ class GroupServerStore(SQLBaseStore):
|
||||||
},
|
},
|
||||||
retcol="is_admin",
|
retcol="is_admin",
|
||||||
allow_none=True,
|
allow_none=True,
|
||||||
desc="is_user_adim_in_group",
|
desc="is_user_admin_in_group",
|
||||||
)
|
)
|
||||||
|
|
||||||
def add_group_invite(self, group_id, user_id):
|
def add_group_invite(self, group_id, user_id):
|
||||||
|
@ -647,6 +672,60 @@ class GroupServerStore(SQLBaseStore):
|
||||||
allow_none=True,
|
allow_none=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_users_membership_info_in_group(self, group_id, user_id):
|
||||||
|
"""Get a dict describing the membership of a user in a group.
|
||||||
|
|
||||||
|
Example if joined:
|
||||||
|
|
||||||
|
{
|
||||||
|
"membership": "join",
|
||||||
|
"is_public": True,
|
||||||
|
"is_privileged": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
Returns an empty dict if the user is not join/invite/etc
|
||||||
|
"""
|
||||||
|
def _get_users_membership_in_group_txn(txn):
|
||||||
|
row = self._simple_select_one_txn(
|
||||||
|
txn,
|
||||||
|
table="group_users",
|
||||||
|
keyvalues={
|
||||||
|
"group_id": group_id,
|
||||||
|
"user_id": user_id,
|
||||||
|
},
|
||||||
|
retcols=("is_admin", "is_public"),
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if row:
|
||||||
|
return {
|
||||||
|
"membership": "join",
|
||||||
|
"is_public": row["is_public"],
|
||||||
|
"is_privileged": row["is_admin"],
|
||||||
|
}
|
||||||
|
|
||||||
|
row = self._simple_select_one_onecol_txn(
|
||||||
|
txn,
|
||||||
|
table="group_invites",
|
||||||
|
keyvalues={
|
||||||
|
"group_id": group_id,
|
||||||
|
"user_id": user_id,
|
||||||
|
},
|
||||||
|
retcol="user_id",
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if row:
|
||||||
|
return {
|
||||||
|
"membership": "invite",
|
||||||
|
}
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return self.runInteraction(
|
||||||
|
"get_users_membership_info_in_group", _get_users_membership_in_group_txn,
|
||||||
|
)
|
||||||
|
|
||||||
def add_user_to_group(self, group_id, user_id, is_admin=False, is_public=True,
|
def add_user_to_group(self, group_id, user_id, is_admin=False, is_public=True,
|
||||||
local_attestation=None, remote_attestation=None):
|
local_attestation=None, remote_attestation=None):
|
||||||
"""Add a user to the group server.
|
"""Add a user to the group server.
|
||||||
|
|
Loading…
Reference in New Issue