diff --git a/synapse/handlers/directory.py b/synapse/handlers/directory.py
index 5d79c6690c..98ac0684fc 100644
--- a/synapse/handlers/directory.py
+++ b/synapse/handlers/directory.py
@@ -21,8 +21,6 @@ from synapse.api.errors import SynapseError
from synapse.api.events.room import RoomAliasesEvent
import logging
-import sqlite3
-
logger = logging.getLogger(__name__)
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index bfbd7f9783..4f47f5b6ae 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -120,15 +120,23 @@ class RoomCreationHandler(BaseHandler):
user, room_id, is_public=is_public
)
+ room_member_handler = self.hs.get_handlers().room_member_handler
+
@defer.inlineCallbacks
def handle_event(event):
snapshot = yield self.store.snapshot_room(event)
logger.debug("Event: %s", event)
- yield self._on_new_room_event(
- event, snapshot, extra_users=[user], suppress_auth=True
- )
+ if event.type == RoomMemberEvent.TYPE:
+ yield room_member_handler.change_membership(
+ event,
+ do_auth=False
+ )
+ else:
+ yield self._on_new_room_event(
+ event, snapshot, extra_users=[user], suppress_auth=True
+ )
for event in creation_events:
yield handle_event(event)
@@ -155,16 +163,6 @@ class RoomCreationHandler(BaseHandler):
yield handle_event(topic_event)
- content = {"membership": Membership.JOIN}
- join_event = self.event_factory.create_event(
- etype=RoomMemberEvent.TYPE,
- state_key=user_id,
- room_id=room_id,
- user_id=user_id,
- membership=Membership.JOIN,
- content=content
- )
-
content = {"membership": Membership.INVITE}
for invitee in invite_list:
invite_event = self.event_factory.create_event(
@@ -174,16 +172,7 @@ class RoomCreationHandler(BaseHandler):
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
- )
+ yield handle_event(invite_event)
result = {"room_id": room_id}
@@ -194,9 +183,11 @@ class RoomCreationHandler(BaseHandler):
defer.returnValue(result)
def _create_events_for_new_room(self, creator, room_id, is_public=False):
+ creator_id = creator.to_string()
+
event_keys = {
"room_id": room_id,
- "user_id": creator.to_string(),
+ "user_id": creator_id,
}
def create(etype, **content):
@@ -211,6 +202,16 @@ class RoomCreationHandler(BaseHandler):
creator=creator.to_string(),
)
+ join_event = self.event_factory.create_event(
+ etype=RoomMemberEvent.TYPE,
+ state_key=creator_id,
+ content={
+ "membership": Membership.JOIN,
+ },
+ **event_keys
+ )
+
+
power_levels_event = self.event_factory.create_event(
etype=RoomPowerLevelsEvent.TYPE,
content={
@@ -239,6 +240,7 @@ class RoomCreationHandler(BaseHandler):
return [
creation_event,
+ join_event,
power_levels_event,
join_rules_event,
]
diff --git a/synapse/storage/directory.py b/synapse/storage/directory.py
index f2e895a5c2..2be9c41374 100644
--- a/synapse/storage/directory.py
+++ b/synapse/storage/directory.py
@@ -14,10 +14,15 @@
# limitations under the License.
from ._base import SQLBaseStore
+
+from synapse.api.errors import SynapseError
+
from twisted.internet import defer
from collections import namedtuple
+import sqlite3
+
RoomAliasMapping = namedtuple(
"RoomAliasMapping",
|