forked from MirrorHub/synapse
before fulfilling a group invite,check if user is already joined/invited (#3436)
Fixes vector-im/riot-web#5645
This commit is contained in:
parent
2efd050c9d
commit
9a84d74417
2 changed files with 17 additions and 4 deletions
1
changelog.d/3436.bugfix
Normal file
1
changelog.d/3436.bugfix
Normal file
|
@ -0,0 +1 @@
|
|||
Fix a problem where users could be invited twice to the same group.
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2017 Vector Creations Ltd
|
||||
# Copyright 2018 New Vector Ltd
|
||||
# Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -20,16 +21,16 @@ from six import string_types
|
|||
|
||||
from twisted.internet import defer
|
||||
|
||||
from synapse.api.errors import SynapseError
|
||||
from synapse.api.errors import Codes, SynapseError
|
||||
from synapse.types import GroupID, RoomID, UserID, get_domain_from_id
|
||||
from synapse.util.async_helpers import concurrently_execute
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# TODO: Allow users to "knock" or simpkly join depending on rules
|
||||
# TODO: Allow users to "knock" or simply join depending on rules
|
||||
# TODO: Federation admin APIs
|
||||
# TODO: is_priveged flag to users and is_public to users and rooms
|
||||
# TODO: is_privileged flag to users and is_public to users and rooms
|
||||
# TODO: Audit log for admins (profile updates, membership changes, users who tried
|
||||
# to join but were rejected, etc)
|
||||
# TODO: Flairs
|
||||
|
@ -590,7 +591,18 @@ class GroupsServerHandler(object):
|
|||
)
|
||||
|
||||
# TODO: Check if user knocked
|
||||
# TODO: Check if user is already invited
|
||||
|
||||
invited_users = yield self.store.get_invited_users_in_group(group_id)
|
||||
if user_id in invited_users:
|
||||
raise SynapseError(
|
||||
400, "User already invited to group", errcode=Codes.BAD_STATE
|
||||
)
|
||||
|
||||
user_results = yield self.store.get_users_in_group(
|
||||
group_id, include_private=True
|
||||
)
|
||||
if user_id in [user_result["user_id"] for user_result in user_results]:
|
||||
raise SynapseError(400, "User already in group")
|
||||
|
||||
content = {
|
||||
"profile": {"name": group["name"], "avatar_url": group["avatar_url"]},
|
||||
|
|
Loading…
Reference in a new issue