|
|
|
@ -51,6 +51,7 @@ from synapse.api.filtering import Filter |
|
|
|
|
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersion |
|
|
|
|
from synapse.event_auth import validate_event_for_room_version |
|
|
|
|
from synapse.events import EventBase |
|
|
|
|
from synapse.events.snapshot import UnpersistedEventContext |
|
|
|
|
from synapse.events.utils import copy_and_fixup_power_levels_contents |
|
|
|
|
from synapse.handlers.relations import BundledAggregations |
|
|
|
|
from synapse.module_api import NOT_SPAM |
|
|
|
@ -211,7 +212,7 @@ class RoomCreationHandler: |
|
|
|
|
# the required power level to send the tombstone event. |
|
|
|
|
( |
|
|
|
|
tombstone_event, |
|
|
|
|
tombstone_context, |
|
|
|
|
tombstone_unpersisted_context, |
|
|
|
|
) = await self.event_creation_handler.create_event( |
|
|
|
|
requester, |
|
|
|
|
{ |
|
|
|
@ -225,6 +226,9 @@ class RoomCreationHandler: |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
tombstone_context = await tombstone_unpersisted_context.persist( |
|
|
|
|
tombstone_event |
|
|
|
|
) |
|
|
|
|
validate_event_for_room_version(tombstone_event) |
|
|
|
|
await self._event_auth_handler.check_auth_rules_from_context( |
|
|
|
|
tombstone_event |
|
|
|
@ -1092,7 +1096,7 @@ class RoomCreationHandler: |
|
|
|
|
content: JsonDict, |
|
|
|
|
for_batch: bool, |
|
|
|
|
**kwargs: Any, |
|
|
|
|
) -> Tuple[EventBase, synapse.events.snapshot.EventContext]: |
|
|
|
|
) -> Tuple[EventBase, synapse.events.snapshot.UnpersistedEventContextBase]: |
|
|
|
|
""" |
|
|
|
|
Creates an event and associated event context. |
|
|
|
|
Args: |
|
|
|
@ -1111,20 +1115,23 @@ class RoomCreationHandler: |
|
|
|
|
|
|
|
|
|
event_dict = create_event_dict(etype, content, **kwargs) |
|
|
|
|
|
|
|
|
|
new_event, new_context = await self.event_creation_handler.create_event( |
|
|
|
|
( |
|
|
|
|
new_event, |
|
|
|
|
new_unpersisted_context, |
|
|
|
|
) = await self.event_creation_handler.create_event( |
|
|
|
|
creator, |
|
|
|
|
event_dict, |
|
|
|
|
prev_event_ids=prev_event, |
|
|
|
|
depth=depth, |
|
|
|
|
state_map=state_map, |
|
|
|
|
for_batch=for_batch, |
|
|
|
|
current_state_group=current_state_group, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
depth += 1 |
|
|
|
|
prev_event = [new_event.event_id] |
|
|
|
|
state_map[(new_event.type, new_event.state_key)] = new_event.event_id |
|
|
|
|
|
|
|
|
|
return new_event, new_context |
|
|
|
|
return new_event, new_unpersisted_context |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
config = self._presets_dict[preset_config] |
|
|
|
@ -1134,10 +1141,10 @@ class RoomCreationHandler: |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
creation_content.update({"creator": creator_id}) |
|
|
|
|
creation_event, creation_context = await create_event( |
|
|
|
|
creation_event, unpersisted_creation_context = await create_event( |
|
|
|
|
EventTypes.Create, creation_content, False |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
creation_context = await unpersisted_creation_context.persist(creation_event) |
|
|
|
|
logger.debug("Sending %s in new room", EventTypes.Member) |
|
|
|
|
ev = await self.event_creation_handler.handle_new_client_event( |
|
|
|
|
requester=creator, |
|
|
|
@ -1181,7 +1188,6 @@ class RoomCreationHandler: |
|
|
|
|
power_event, power_context = await create_event( |
|
|
|
|
EventTypes.PowerLevels, pl_content, True |
|
|
|
|
) |
|
|
|
|
current_state_group = power_context._state_group |
|
|
|
|
events_to_send.append((power_event, power_context)) |
|
|
|
|
else: |
|
|
|
|
power_level_content: JsonDict = { |
|
|
|
@ -1230,14 +1236,12 @@ class RoomCreationHandler: |
|
|
|
|
power_level_content, |
|
|
|
|
True, |
|
|
|
|
) |
|
|
|
|
current_state_group = pl_context._state_group |
|
|
|
|
events_to_send.append((pl_event, pl_context)) |
|
|
|
|
|
|
|
|
|
if room_alias and (EventTypes.CanonicalAlias, "") not in initial_state: |
|
|
|
|
room_alias_event, room_alias_context = await create_event( |
|
|
|
|
EventTypes.CanonicalAlias, {"alias": room_alias.to_string()}, True |
|
|
|
|
) |
|
|
|
|
current_state_group = room_alias_context._state_group |
|
|
|
|
events_to_send.append((room_alias_event, room_alias_context)) |
|
|
|
|
|
|
|
|
|
if (EventTypes.JoinRules, "") not in initial_state: |
|
|
|
@ -1246,7 +1250,6 @@ class RoomCreationHandler: |
|
|
|
|
{"join_rule": config["join_rules"]}, |
|
|
|
|
True, |
|
|
|
|
) |
|
|
|
|
current_state_group = join_rules_context._state_group |
|
|
|
|
events_to_send.append((join_rules_event, join_rules_context)) |
|
|
|
|
|
|
|
|
|
if (EventTypes.RoomHistoryVisibility, "") not in initial_state: |
|
|
|
@ -1255,7 +1258,6 @@ class RoomCreationHandler: |
|
|
|
|
{"history_visibility": config["history_visibility"]}, |
|
|
|
|
True, |
|
|
|
|
) |
|
|
|
|
current_state_group = visibility_context._state_group |
|
|
|
|
events_to_send.append((visibility_event, visibility_context)) |
|
|
|
|
|
|
|
|
|
if config["guest_can_join"]: |
|
|
|
@ -1265,14 +1267,12 @@ class RoomCreationHandler: |
|
|
|
|
{EventContentFields.GUEST_ACCESS: GuestAccess.CAN_JOIN}, |
|
|
|
|
True, |
|
|
|
|
) |
|
|
|
|
current_state_group = guest_access_context._state_group |
|
|
|
|
events_to_send.append((guest_access_event, guest_access_context)) |
|
|
|
|
|
|
|
|
|
for (etype, state_key), content in initial_state.items(): |
|
|
|
|
event, context = await create_event( |
|
|
|
|
etype, content, True, state_key=state_key |
|
|
|
|
) |
|
|
|
|
current_state_group = context._state_group |
|
|
|
|
events_to_send.append((event, context)) |
|
|
|
|
|
|
|
|
|
if config["encrypted"]: |
|
|
|
@ -1284,9 +1284,16 @@ class RoomCreationHandler: |
|
|
|
|
) |
|
|
|
|
events_to_send.append((encryption_event, encryption_context)) |
|
|
|
|
|
|
|
|
|
datastore = self.hs.get_datastores().state |
|
|
|
|
events_and_context = ( |
|
|
|
|
await UnpersistedEventContext.batch_persist_unpersisted_contexts( |
|
|
|
|
events_to_send, room_id, current_state_group, datastore |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
last_event = await self.event_creation_handler.handle_new_client_event( |
|
|
|
|
creator, |
|
|
|
|
events_to_send, |
|
|
|
|
events_and_context, |
|
|
|
|
ignore_shadow_ban=True, |
|
|
|
|
ratelimit=False, |
|
|
|
|
) |
|
|
|
|