|
|
@@ -27,6 +27,7 @@ from synapse.util import stringutils, unwrapFirstError |
|
|
|
from synapse.util.async import run_on_reactor |
|
|
|
from synapse.events.utils import serialize_event |
|
|
|
|
|
|
|
from collections import OrderedDict |
|
|
|
import logging |
|
|
|
import string |
|
|
|
|
|
|
@@ -143,11 +144,18 @@ class RoomCreationHandler(BaseHandler): |
|
|
|
else RoomCreationPreset.PRIVATE_CHAT |
|
|
|
) |
|
|
|
|
|
|
|
raw_initial_state = config.get("initial_state", []) |
|
|
|
|
|
|
|
initial_state = OrderedDict() |
|
|
|
for val in raw_initial_state: |
|
|
|
initial_state[(val["type"], val.get("state_key", ""))] = val["content"] |
|
|
|
|
|
|
|
user = UserID.from_string(user_id) |
|
|
|
creation_events = self._create_events_for_new_room( |
|
|
|
user, room_id, |
|
|
|
preset_config=preset_config, |
|
|
|
invite_list=invite_list, |
|
|
|
initial_state=initial_state, |
|
|
|
) |
|
|
|
|
|
|
|
msg_handler = self.hs.get_handlers().message_handler |
|
|
@@ -195,7 +203,7 @@ class RoomCreationHandler(BaseHandler): |
|
|
|
defer.returnValue(result) |
|
|
|
|
|
|
|
def _create_events_for_new_room(self, creator, room_id, preset_config, |
|
|
|
invite_list): |
|
|
|
invite_list, initial_state): |
|
|
|
config = RoomCreationHandler.PRESETS_DICT[preset_config] |
|
|
|
|
|
|
|
creator_id = creator.to_string() |
|
|
@@ -230,50 +238,62 @@ class RoomCreationHandler(BaseHandler): |
|
|
|
}, |
|
|
|
) |
|
|
|
|
|
|
|
power_level_content = { |
|
|
|
"users": { |
|
|
|
creator.to_string(): 100, |
|
|
|
}, |
|
|
|
"users_default": 0, |
|
|
|
"events": { |
|
|
|
EventTypes.Name: 100, |
|
|
|
EventTypes.PowerLevels: 100, |
|
|
|
EventTypes.RoomHistoryVisibility: 100, |
|
|
|
}, |
|
|
|
"events_default": 0, |
|
|
|
"state_default": 50, |
|
|
|
"ban": 50, |
|
|
|
"kick": 50, |
|
|
|
"redact": 50, |
|
|
|
"invite": 0, |
|
|
|
} |
|
|
|
returned_events = [creation_event, join_event] |
|
|
|
|
|
|
|
if (EventTypes.PowerLevels, '') not in initial_state: |
|
|
|
power_level_content = { |
|
|
|
"users": { |
|
|
|
creator.to_string(): 100, |
|
|
|
}, |
|
|
|
"users_default": 0, |
|
|
|
"events": { |
|
|
|
EventTypes.Name: 100, |
|
|
|
EventTypes.PowerLevels: 100, |
|
|
|
EventTypes.RoomHistoryVisibility: 100, |
|
|
|
}, |
|
|
|
"events_default": 0, |
|
|
|
"state_default": 50, |
|
|
|
"ban": 50, |
|
|
|
"kick": 50, |
|
|
|
"redact": 50, |
|
|
|
"invite": 0, |
|
|
|
} |
|
|
|
|
|
|
|
if config["original_invitees_have_ops"]: |
|
|
|
for invitee in invite_list: |
|
|
|
power_level_content["users"][invitee] = 100 |
|
|
|
if config["original_invitees_have_ops"]: |
|
|
|
for invitee in invite_list: |
|
|
|
power_level_content["users"][invitee] = 100 |
|
|
|
|
|
|
|
power_levels_event = create( |
|
|
|
etype=EventTypes.PowerLevels, |
|
|
|
content=power_level_content, |
|
|
|
) |
|
|
|
power_levels_event = create( |
|
|
|
etype=EventTypes.PowerLevels, |
|
|
|
content=power_level_content, |
|
|
|
) |
|
|
|
|
|
|
|
join_rules_event = create( |
|
|
|
etype=EventTypes.JoinRules, |
|
|
|
content={"join_rule": config["join_rules"]}, |
|
|
|
) |
|
|
|
returned_events.append(power_levels_event) |
|
|
|
|
|
|
|
history_event = create( |
|
|
|
etype=EventTypes.RoomHistoryVisibility, |
|
|
|
content={"history_visibility": config["history_visibility"]} |
|
|
|
) |
|
|
|
if (EventTypes.JoinRules, '') not in initial_state: |
|
|
|
join_rules_event = create( |
|
|
|
etype=EventTypes.JoinRules, |
|
|
|
content={"join_rule": config["join_rules"]}, |
|
|
|
) |
|
|
|
|
|
|
|
return [ |
|
|
|
creation_event, |
|
|
|
join_event, |
|
|
|
power_levels_event, |
|
|
|
history_event, |
|
|
|
join_rules_event, |
|
|
|
] |
|
|
|
returned_events.append(join_rules_event) |
|
|
|
|
|
|
|
if (EventTypes.RoomHistoryVisibility, '') not in initial_state: |
|
|
|
history_event = create( |
|
|
|
etype=EventTypes.RoomHistoryVisibility, |
|
|
|
content={"history_visibility": config["history_visibility"]} |
|
|
|
) |
|
|
|
|
|
|
|
returned_events.append(history_event) |
|
|
|
|
|
|
|
for (etype, state_key), content in initial_state.items(): |
|
|
|
returned_events.append(create( |
|
|
|
etype=etype, |
|
|
|
state_key=state_key, |
|
|
|
content=content, |
|
|
|
)) |
|
|
|
|
|
|
|
return returned_events |
|
|
|
|
|
|
|
|
|
|
|
class RoomMemberHandler(BaseHandler): |
|
|
|