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

Commit dd03599

Browse files
committed
async/await is_server_admin call from _user_can_delete_alias
1 parent 433d5bc commit dd03599

File tree

2 files changed

+46
-41
lines changed

2 files changed

+46
-41
lines changed

synapse/handlers/directory.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
StoreError,
2929
SynapseError,
3030
)
31-
from synapse.types import RoomAlias, UserID, get_domain_from_id
31+
from synapse.types import Requester, RoomAlias, UserID, get_domain_from_id
3232

3333
from ._base import BaseHandler
3434

@@ -158,22 +158,23 @@ def create_association(
158158
# permission in the room; this is permitted.
159159
logger.info("Skipping updating aliases event due to auth error %s", e)
160160

161-
@defer.inlineCallbacks
162-
def delete_association(self, requester, room_alias, send_event=True):
161+
async def delete_association(
162+
self, requester: Requester, room_alias: RoomAlias, send_event: bool = True,
163+
) -> str:
163164
"""Remove an alias from the directory
164165
165166
(this is only meant for human users; AS users should call
166167
delete_appservice_association)
167168
168169
Args:
169-
requester (Requester):
170-
room_alias (RoomAlias):
171-
send_event (bool): Whether to send an updated m.room.aliases event.
172-
Note that, if we delete the canonical alias, we will always attempt
173-
to send an m.room.canonical_alias event
170+
requester:
171+
room_alias:
172+
send_event: Whether to send an updated m.room.aliases event. Note
173+
that, if we delete the canonical alias, we will always attempt to
174+
send an m.room.canonical_alias event
174175
175176
Returns:
176-
Deferred[unicode]: room id that the alias used to point to
177+
Room id that the alias used to point to
177178
178179
Raises:
179180
NotFoundError: if the alias doesn't exist
@@ -186,7 +187,7 @@ def delete_association(self, requester, room_alias, send_event=True):
186187
user_id = requester.user.to_string()
187188

188189
try:
189-
can_delete = yield self._user_can_delete_alias(room_alias, user_id)
190+
can_delete = await self._user_can_delete_alias(room_alias, user_id)
190191
except StoreError as e:
191192
if e.code == 404:
192193
raise NotFoundError("Unknown room alias")
@@ -195,21 +196,21 @@ def delete_association(self, requester, room_alias, send_event=True):
195196
if not can_delete:
196197
raise AuthError(403, "You don't have permission to delete the alias.")
197198

198-
can_delete = yield self.can_modify_alias(room_alias, user_id=user_id)
199+
can_delete = await self.can_modify_alias(room_alias, user_id=user_id)
199200
if not can_delete:
200201
raise SynapseError(
201202
400,
202203
"This alias is reserved by an application service.",
203204
errcode=Codes.EXCLUSIVE,
204205
)
205206

206-
room_id = yield self._delete_association(room_alias)
207+
room_id = await self._delete_association(room_alias)
207208

208209
try:
209210
if send_event:
210-
yield self.send_room_alias_update_event(requester, room_id)
211+
await self.send_room_alias_update_event(requester, room_id)
211212

212-
yield self._update_canonical_alias(
213+
await self._update_canonical_alias(
213214
requester, requester.user.to_string(), room_id, room_alias
214215
)
215216
except AuthError as e:
@@ -368,14 +369,13 @@ def can_modify_alias(self, alias, user_id=None):
368369
# either no interested services, or no service with an exclusive lock
369370
return defer.succeed(True)
370371

371-
@defer.inlineCallbacks
372-
def _user_can_delete_alias(self, alias, user_id):
373-
creator = yield self.store.get_room_alias_creator(alias.to_string())
372+
async def _user_can_delete_alias(self, alias: RoomAlias, user_id: str) -> bool:
373+
creator = await self.store.get_room_alias_creator(alias.to_string())
374374

375375
if creator is not None and creator == user_id:
376376
return True
377377

378-
is_admin = yield self.auth.is_server_admin(UserID.from_string(user_id))
378+
is_admin = await self.auth.is_server_admin(UserID.from_string(user_id))
379379
return is_admin
380380

381381
@defer.inlineCallbacks

synapse/handlers/room.py

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import math
2323
import string
2424
from collections import OrderedDict
25+
from types import Dict
2526

2627
from six import iteritems, string_types
2728

@@ -145,15 +146,16 @@ def upgrade_room(
145146

146147
return ret
147148

148-
@defer.inlineCallbacks
149-
def _upgrade_room(self, requester, old_room_id, new_version):
149+
async def _upgrade_room(
150+
self, requester: Requester, old_room_id: str, new_version: RoomVersion,
151+
) -> RoomID:
150152
user_id = requester.user.to_string()
151153

152154
# start by allocating a new room id
153-
r = yield self.store.get_room(old_room_id)
155+
r = await self.store.get_room(old_room_id)
154156
if r is None:
155157
raise NotFoundError("Unknown room id %s" % (old_room_id,))
156-
new_room_id = yield self._generate_room_id(
158+
new_room_id = await self._generate_room_id(
157159
creator_id=user_id, is_public=r["is_public"], room_version=new_version,
158160
)
159161

@@ -164,7 +166,7 @@ def _upgrade_room(self, requester, old_room_id, new_version):
164166
(
165167
tombstone_event,
166168
tombstone_context,
167-
) = yield self.event_creation_handler.create_event(
169+
) = await self.event_creation_handler.create_event(
168170
requester,
169171
{
170172
"type": EventTypes.Tombstone,
@@ -178,12 +180,12 @@ def _upgrade_room(self, requester, old_room_id, new_version):
178180
},
179181
token_id=requester.access_token_id,
180182
)
181-
old_room_version = yield self.store.get_room_version_id(old_room_id)
182-
yield self.auth.check_from_context(
183+
old_room_version = await self.store.get_room_version_id(old_room_id)
184+
await self.auth.check_from_context(
183185
old_room_version, tombstone_event, tombstone_context
184186
)
185187

186-
yield self.clone_existing_room(
188+
await self.clone_existing_room(
187189
requester,
188190
old_room_id=old_room_id,
189191
new_room_id=new_room_id,
@@ -192,25 +194,25 @@ def _upgrade_room(self, requester, old_room_id, new_version):
192194
)
193195

194196
# now send the tombstone
195-
yield self.event_creation_handler.send_nonmember_event(
197+
await self.event_creation_handler.send_nonmember_event(
196198
requester, tombstone_event, tombstone_context
197199
)
198200

199-
old_room_state = yield tombstone_context.get_current_state_ids()
201+
old_room_state = await tombstone_context.get_current_state_ids()
200202

201203
# update any aliases
202-
yield self._move_aliases_to_new_room(
204+
await self._move_aliases_to_new_room(
203205
requester, old_room_id, new_room_id, old_room_state
204206
)
205207

206208
# Copy over user push rules, tags and migrate room directory state
207-
yield self.room_member_handler.transfer_room_state_on_room_upgrade(
209+
await self.room_member_handler.transfer_room_state_on_room_upgrade(
208210
old_room_id, new_room_id
209211
)
210212

211213
# finally, shut down the PLs in the old room, and update them in the new
212214
# room.
213-
yield self._update_upgraded_room_pls(
215+
await self._update_upgraded_room_pls(
214216
requester, old_room_id, new_room_id, old_room_state,
215217
)
216218

@@ -443,19 +445,22 @@ def clone_existing_room(
443445
# XXX invites/joins
444446
# XXX 3pid invites
445447

446-
@defer.inlineCallbacks
447-
def _move_aliases_to_new_room(
448-
self, requester, old_room_id, new_room_id, old_room_state
448+
async def _move_aliases_to_new_room(
449+
self,
450+
requester: Requester,
451+
old_room_id: str,
452+
new_room_id: str,
453+
old_room_state: Dict[(str, str), str],
449454
):
450455
directory_handler = self.hs.get_handlers().directory_handler
451456

452-
aliases = yield self.store.get_aliases_for_room(old_room_id)
457+
aliases = await self.store.get_aliases_for_room(old_room_id)
453458

454459
# check to see if we have a canonical alias.
455460
canonical_alias = None
456461
canonical_alias_event_id = old_room_state.get((EventTypes.CanonicalAlias, ""))
457462
if canonical_alias_event_id:
458-
canonical_alias_event = yield self.store.get_event(canonical_alias_event_id)
463+
canonical_alias_event = await self.store.get_event(canonical_alias_event_id)
459464
if canonical_alias_event:
460465
canonical_alias = canonical_alias_event.content.get("alias", "")
461466

@@ -475,7 +480,7 @@ def _move_aliases_to_new_room(
475480
for alias_str in aliases:
476481
alias = RoomAlias.from_string(alias_str)
477482
try:
478-
yield directory_handler.delete_association(
483+
await directory_handler.delete_association(
479484
requester, alias, send_event=False
480485
)
481486
removed_aliases.append(alias_str)
@@ -496,14 +501,14 @@ def _move_aliases_to_new_room(
496501
# as when you remove an alias from the directory normally - it just means that
497502
# the aliases event gets out of sync with the directory
498503
# (cf https://github.com/vector-im/riot-web/issues/2369)
499-
yield directory_handler.send_room_alias_update_event(requester, old_room_id)
504+
await directory_handler.send_room_alias_update_event(requester, old_room_id)
500505
except AuthError as e:
501506
logger.warning("Failed to send updated alias event on old room: %s", e)
502507

503508
# we can now add any aliases we successfully removed to the new room.
504509
for alias in removed_aliases:
505510
try:
506-
yield directory_handler.create_association(
511+
await directory_handler.create_association(
507512
requester,
508513
RoomAlias.from_string(alias),
509514
new_room_id,
@@ -519,7 +524,7 @@ def _move_aliases_to_new_room(
519524

520525
try:
521526
if canonical_alias and (canonical_alias in removed_aliases):
522-
yield self.event_creation_handler.create_and_send_nonmember_event(
527+
await self.event_creation_handler.create_and_send_nonmember_event(
523528
requester,
524529
{
525530
"type": EventTypes.CanonicalAlias,
@@ -531,7 +536,7 @@ def _move_aliases_to_new_room(
531536
ratelimit=False,
532537
)
533538

534-
yield directory_handler.send_room_alias_update_event(requester, new_room_id)
539+
await directory_handler.send_room_alias_update_event(requester, new_room_id)
535540
except SynapseError as e:
536541
# again I'm not really expecting this to fail, but if it does, I'd rather
537542
# we returned the new room to the client at this point.

0 commit comments

Comments
 (0)