|
@@ -191,6 +191,8 @@ class RoomMemberHandler(BaseHandler):
|
|
|
if action in ["kick", "unban"]:
|
|
|
effective_membership_state = "leave"
|
|
|
|
|
|
+ # if this is a join with a 3pid signature, we may need to turn a 3pid
|
|
|
+ # invite into a normal invite before we can handle the join.
|
|
|
if third_party_signed is not None:
|
|
|
replication = self.hs.get_replication_layer()
|
|
|
yield replication.exchange_third_party_invite(
|
|
@@ -208,6 +210,16 @@ class RoomMemberHandler(BaseHandler):
|
|
|
if is_blocked:
|
|
|
raise SynapseError(403, "This room has been blocked on this server")
|
|
|
|
|
|
+ if (effective_membership_state == "invite" and
|
|
|
+ self.hs.config.block_non_admin_invites):
|
|
|
+ is_requester_admin = yield self.auth.is_server_admin(
|
|
|
+ requester.user,
|
|
|
+ )
|
|
|
+ if not is_requester_admin:
|
|
|
+ raise SynapseError(
|
|
|
+ 403, "Invites have been disabled on this server",
|
|
|
+ )
|
|
|
+
|
|
|
latest_event_ids = yield self.store.get_latest_event_ids_in_room(room_id)
|
|
|
current_state_ids = yield self.state_handler.get_current_state_ids(
|
|
|
room_id, latest_event_ids=latest_event_ids,
|
|
@@ -471,6 +483,16 @@ class RoomMemberHandler(BaseHandler):
|
|
|
requester,
|
|
|
txn_id
|
|
|
):
|
|
|
+ if self.hs.config.block_non_admin_invites:
|
|
|
+ is_requester_admin = yield self.auth.is_server_admin(
|
|
|
+ requester.user,
|
|
|
+ )
|
|
|
+ if not is_requester_admin:
|
|
|
+ raise SynapseError(
|
|
|
+ 403, "Invites have been disabled on this server",
|
|
|
+ Codes.FORBIDDEN,
|
|
|
+ )
|
|
|
+
|
|
|
invitee = yield self._lookup_3pid(
|
|
|
id_server, medium, address
|
|
|
)
|