diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 171ca3d797..a0d0f2af16 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -25,14 +25,14 @@ from synapse.api.events.room import (
RoomSendEventLevelEvent, RoomOpsPowerLevelsEvent, RoomNameEvent,
)
from synapse.util import stringutils
-from ._base import BaseRoomHandler
+from ._base import BaseHandler
import logging
logger = logging.getLogger(__name__)
-class RoomCreationHandler(BaseRoomHandler):
+class RoomCreationHandler(BaseHandler):
@defer.inlineCallbacks
def create_room(self, user_id, room_id, config):
@@ -65,6 +65,13 @@ class RoomCreationHandler(BaseRoomHandler):
else:
room_alias = None
+ invite_list = config.get("invite", [])
+ for i in invite_list:
+ try:
+ self.hs.parse_userid(i)
+ except:
+ raise SynapseError(400, "Invalid user_id: %s" % (i,))
+
is_public = config.get("visibility", None) == "public"
if room_id:
@@ -105,7 +112,9 @@ class RoomCreationHandler(BaseRoomHandler):
)
if room_alias:
- yield self.store.create_room_alias_association(
+ directory_handler = self.hs.get_handlers().directory_handler
+ yield directory_handler.create_association(
+ user_id=user_id,
room_id=room_id,
room_alias=room_alias,
servers=[self.hs.hostname],
@@ -176,6 +185,25 @@ class RoomCreationHandler(BaseRoomHandler):
do_auth=False
)
+ content = {"membership": Membership.INVITE}
+ for invitee in invite_list:
+ invite_event = self.event_factory.create_event(
+ etype=RoomMemberEvent.TYPE,
+ state_key=invitee,
+ room_id=room_id,
+ user_id=user_id,
+ content=content
+ )
+
+ yield self.hs.get_handlers().room_member_handler.change_membership(
+ invite_event,
+ do_auth=False
+ )
+
+ yield self.hs.get_handlers().room_member_handler.change_membership(
+ join_event,
+ do_auth=False
+ )
result = {"room_id": room_id}
if room_alias:
result["room_alias"] = room_alias.to_string()
@@ -239,7 +267,7 @@ class RoomCreationHandler(BaseRoomHandler):
]
-class RoomMemberHandler(BaseRoomHandler):
+class RoomMemberHandler(BaseHandler):
# TODO(paul): This handler currently contains a messy conflation of
# low-level API that works on UserID objects and so on, and REST-level
# API that takes ID strings and returns pagination chunks. These concerns
@@ -560,7 +588,7 @@ class RoomMemberHandler(BaseRoomHandler):
extra_users=[target_user]
)
-class RoomListHandler(BaseRoomHandler):
+class RoomListHandler(BaseHandler):
@defer.inlineCallbacks
def get_public_room_list(self):
|