Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 070f1bb

Browse files
committed
ditch auth events and pass state map instead
1 parent 059746d commit 070f1bb

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

synapse/handlers/room.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ def __init__(self, hs: "HomeServer"):
120120
self._event_auth_handler = hs.get_event_auth_handler()
121121
self.config = hs.config
122122
self.request_ratelimiter = hs.get_request_ratelimiter()
123+
self.builder = hs.get_event_builder_factory()
123124

124125
# Room state based off defined presets
125126
self._presets_dict: Dict[str, Dict[str, Any]] = {
@@ -1043,10 +1044,14 @@ async def _send_events_for_new_room(
10431044
creator_id = creator.user.to_string()
10441045
event_keys = {"room_id": room_id, "sender": creator_id, "state_key": ""}
10451046
depth = 1
1047+
# the last event sent/persisted to the db
10461048
last_sent_event_id: Optional[str] = None
1049+
# the most recently created event
10471050
prev_event: List[str] = []
1048-
state_map = {}
1049-
auth_events = []
1051+
# a map of event types, state keys -> event_ids. We collect these mappings this as events are
1052+
# created (but not persisted to the db) to determine state for future created events
1053+
# (as this info can't be pulled from the db)
1054+
state_map: dict = {}
10501055

10511056
def create_event_dict(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
10521057
e = {"type": etype, "content": content}
@@ -1059,21 +1064,19 @@ def create_event_dict(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
10591064
async def create_event(
10601065
etype: str,
10611066
content: JsonDict,
1062-
auth_event_ids: Optional[List[str]] = None,
10631067
**kwargs: Any,
10641068
) -> EventBase:
10651069
nonlocal depth
10661070
nonlocal prev_event
10671071

10681072
event_dict = create_event_dict(etype, content, **kwargs)
10691073

1070-
event = await self.event_creation_handler.create_event(
1074+
event = await self.event_creation_handler.create_event_for_batch(
10711075
creator,
10721076
event_dict,
1073-
prev_event_ids=prev_event,
1074-
auth_event_ids=auth_event_ids,
1075-
depth=depth,
1076-
for_batch=True,
1077+
prev_event,
1078+
depth,
1079+
state_map,
10771080
)
10781081
depth += 1
10791082
prev_event = [event.event_id]
@@ -1118,7 +1121,6 @@ async def send(
11181121

11191122
logger.debug("Sending %s in new room", EventTypes.Member)
11201123
await send(creation_event, creation_context, creator)
1121-
auth_events.append(creation_event.event_id)
11221124

11231125
# Room create event must exist at this point
11241126
assert last_sent_event_id is not None
@@ -1135,8 +1137,11 @@ async def send(
11351137
)
11361138
last_sent_event_id = member_event_id
11371139
prev_event = [member_event_id]
1140+
1141+
# update the depth and state map here as these are otherwise updated in 'create_event'
1142+
# the membership event has been created through a different code path
11381143
depth += 1
1139-
auth_events.append(member_event_id)
1144+
state_map[(EventTypes.Member, creator.user.to_string())] = member_event_id
11401145

11411146
# We treat the power levels override specially as this needs to be one
11421147
# of the first events that get sent into a room.
@@ -1146,7 +1151,6 @@ async def send(
11461151
power_context = await self.state.compute_event_context(power_event)
11471152
current_state_group = power_context._state_group
11481153
last_sent_stream_id = await send(power_event, power_context, creator)
1149-
auth_events.append(power_event.event_id)
11501154
else:
11511155
power_level_content: JsonDict = {
11521156
"users": {creator_id: 100},
@@ -1196,7 +1200,6 @@ async def send(
11961200
pl_context = await self.state.compute_event_context(pl_event)
11971201
current_state_group = pl_context._state_group
11981202
last_sent_stream_id = await send(pl_event, pl_context, creator)
1199-
auth_events.append(pl_event.event_id)
12001203

12011204
events_to_send = []
12021205
if room_alias and (EventTypes.CanonicalAlias, "") not in initial_state:
@@ -1215,7 +1218,6 @@ async def send(
12151218
join_rules_event = await create_event(
12161219
EventTypes.JoinRules,
12171220
{"join_rule": config["join_rules"]},
1218-
auth_events,
12191221
)
12201222
assert current_state_group is not None
12211223
join_rules_context = await self.state.compute_event_context_for_batched(
@@ -1228,7 +1230,6 @@ async def send(
12281230
visibility_event = await create_event(
12291231
EventTypes.RoomHistoryVisibility,
12301232
{"history_visibility": config["history_visibility"]},
1231-
auth_events,
12321233
)
12331234
assert current_state_group is not None
12341235
visibility_context = await self.state.compute_event_context_for_batched(
@@ -1242,7 +1243,6 @@ async def send(
12421243
guest_access_event = await create_event(
12431244
EventTypes.GuestAccess,
12441245
{EventContentFields.GUEST_ACCESS: GuestAccess.CAN_JOIN},
1245-
auth_events,
12461246
)
12471247
assert current_state_group is not None
12481248
guest_access_context = (
@@ -1254,7 +1254,7 @@ async def send(
12541254
events_to_send.append((guest_access_event, guest_access_context))
12551255

12561256
for (etype, state_key), content in initial_state.items():
1257-
event = await create_event(etype, content, auth_events, state_key=state_key)
1257+
event = await create_event(etype, content, state_key=state_key)
12581258
assert current_state_group is not None
12591259
context = await self.state.compute_event_context_for_batched(
12601260
event, state_map, current_state_group
@@ -1266,7 +1266,6 @@ async def send(
12661266
encryption_event = await create_event(
12671267
EventTypes.RoomEncryption,
12681268
{"algorithm": RoomEncryptionAlgorithms.DEFAULT},
1269-
auth_events,
12701269
state_key="",
12711270
)
12721271
assert current_state_group is not None

0 commit comments

Comments
 (0)