Skip to content

Commit a3e46e6

Browse files
anoadragon453phil-flex
authored andcommitted
async/await is_server_admin (matrix-org#7363)
1 parent 7b2ec46 commit a3e46e6

22 files changed

Lines changed: 410 additions & 438 deletions

changelog.d/7363.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Convert RegistrationWorkerStore.is_server_admin and dependent code to async/await.

synapse/api/auth.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,7 @@ def compute_auth_events(
537537

538538
return defer.succeed(auth_ids)
539539

540-
@defer.inlineCallbacks
541-
def check_can_change_room_list(self, room_id: str, user: UserID):
540+
async def check_can_change_room_list(self, room_id: str, user: UserID):
542541
"""Determine whether the user is allowed to edit the room's entry in the
543542
published room list.
544543
@@ -547,17 +546,17 @@ def check_can_change_room_list(self, room_id: str, user: UserID):
547546
user
548547
"""
549548

550-
is_admin = yield self.is_server_admin(user)
549+
is_admin = await self.is_server_admin(user)
551550
if is_admin:
552551
return True
553552

554553
user_id = user.to_string()
555-
yield self.check_user_in_room(room_id, user_id)
554+
await self.check_user_in_room(room_id, user_id)
556555

557556
# We currently require the user is a "moderator" in the room. We do this
558557
# by checking if they would (theoretically) be able to change the
559558
# m.room.canonical_alias events
560-
power_level_event = yield self.state.get_current_state(
559+
power_level_event = await self.state.get_current_state(
561560
room_id, EventTypes.PowerLevels, ""
562561
)
563562

synapse/federation/federation_client.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -976,14 +976,13 @@ async def get_missing_events(
976976

977977
return signed_events
978978

979-
@defer.inlineCallbacks
980-
def forward_third_party_invite(self, destinations, room_id, event_dict):
979+
async def forward_third_party_invite(self, destinations, room_id, event_dict):
981980
for destination in destinations:
982981
if destination == self.server_name:
983982
continue
984983

985984
try:
986-
yield self.transport_layer.exchange_third_party_invite(
985+
await self.transport_layer.exchange_third_party_invite(
987986
destination=destination, room_id=room_id, event_dict=event_dict
988987
)
989988
return None

synapse/groups/groups_server.py

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -748,48 +748,48 @@ def accept_knock(self, group_id, requester_user_id, content):
748748

749749
raise NotImplementedError()
750750

751-
@defer.inlineCallbacks
752-
def remove_user_from_group(self, group_id, user_id, requester_user_id, content):
751+
async def remove_user_from_group(
752+
self, group_id, user_id, requester_user_id, content
753+
):
753754
"""Remove a user from the group; either a user is leaving or an admin
754755
kicked them.
755756
"""
756757

757-
yield self.check_group_is_ours(group_id, requester_user_id, and_exists=True)
758+
await self.check_group_is_ours(group_id, requester_user_id, and_exists=True)
758759

759760
is_kick = False
760761
if requester_user_id != user_id:
761-
is_admin = yield self.store.is_user_admin_in_group(
762+
is_admin = await self.store.is_user_admin_in_group(
762763
group_id, requester_user_id
763764
)
764765
if not is_admin:
765766
raise SynapseError(403, "User is not admin in group")
766767

767768
is_kick = True
768769

769-
yield self.store.remove_user_from_group(group_id, user_id)
770+
await self.store.remove_user_from_group(group_id, user_id)
770771

771772
if is_kick:
772773
if self.hs.is_mine_id(user_id):
773774
groups_local = self.hs.get_groups_local_handler()
774-
yield groups_local.user_removed_from_group(group_id, user_id, {})
775+
await groups_local.user_removed_from_group(group_id, user_id, {})
775776
else:
776-
yield self.transport_client.remove_user_from_group_notification(
777+
await self.transport_client.remove_user_from_group_notification(
777778
get_domain_from_id(user_id), group_id, user_id, {}
778779
)
779780

780781
if not self.hs.is_mine_id(user_id):
781-
yield self.store.maybe_delete_remote_profile_cache(user_id)
782+
await self.store.maybe_delete_remote_profile_cache(user_id)
782783

783784
# Delete group if the last user has left
784-
users = yield self.store.get_users_in_group(group_id, include_private=True)
785+
users = await self.store.get_users_in_group(group_id, include_private=True)
785786
if not users:
786-
yield self.store.delete_group(group_id)
787+
await self.store.delete_group(group_id)
787788

788789
return {}
789790

790-
@defer.inlineCallbacks
791-
def create_group(self, group_id, requester_user_id, content):
792-
group = yield self.check_group_is_ours(group_id, requester_user_id)
791+
async def create_group(self, group_id, requester_user_id, content):
792+
group = await self.check_group_is_ours(group_id, requester_user_id)
793793

794794
logger.info("Attempting to create group with ID: %r", group_id)
795795

@@ -799,7 +799,7 @@ def create_group(self, group_id, requester_user_id, content):
799799
if group:
800800
raise SynapseError(400, "Group already exists")
801801

802-
is_admin = yield self.auth.is_server_admin(
802+
is_admin = await self.auth.is_server_admin(
803803
UserID.from_string(requester_user_id)
804804
)
805805
if not is_admin:
@@ -822,7 +822,7 @@ def create_group(self, group_id, requester_user_id, content):
822822
long_description = profile.get("long_description")
823823
user_profile = content.get("user_profile", {})
824824

825-
yield self.store.create_group(
825+
await self.store.create_group(
826826
group_id,
827827
requester_user_id,
828828
name=name,
@@ -834,7 +834,7 @@ def create_group(self, group_id, requester_user_id, content):
834834
if not self.hs.is_mine_id(requester_user_id):
835835
remote_attestation = content["attestation"]
836836

837-
yield self.attestations.verify_attestation(
837+
await self.attestations.verify_attestation(
838838
remote_attestation, user_id=requester_user_id, group_id=group_id
839839
)
840840

@@ -845,7 +845,7 @@ def create_group(self, group_id, requester_user_id, content):
845845
local_attestation = None
846846
remote_attestation = None
847847

848-
yield self.store.add_user_to_group(
848+
await self.store.add_user_to_group(
849849
group_id,
850850
requester_user_id,
851851
is_admin=True,
@@ -855,16 +855,15 @@ def create_group(self, group_id, requester_user_id, content):
855855
)
856856

857857
if not self.hs.is_mine_id(requester_user_id):
858-
yield self.store.add_remote_profile_cache(
858+
await self.store.add_remote_profile_cache(
859859
requester_user_id,
860860
displayname=user_profile.get("displayname"),
861861
avatar_url=user_profile.get("avatar_url"),
862862
)
863863

864864
return {"group_id": group_id}
865865

866-
@defer.inlineCallbacks
867-
def delete_group(self, group_id, requester_user_id):
866+
async def delete_group(self, group_id, requester_user_id):
868867
"""Deletes a group, kicking out all current members.
869868
870869
Only group admins or server admins can call this request
@@ -877,33 +876,32 @@ def delete_group(self, group_id, requester_user_id):
877876
Deferred
878877
"""
879878

880-
yield self.check_group_is_ours(group_id, requester_user_id, and_exists=True)
879+
await self.check_group_is_ours(group_id, requester_user_id, and_exists=True)
881880

882881
# Only server admins or group admins can delete groups.
883882

884-
is_admin = yield self.store.is_user_admin_in_group(group_id, requester_user_id)
883+
is_admin = await self.store.is_user_admin_in_group(group_id, requester_user_id)
885884

886885
if not is_admin:
887-
is_admin = yield self.auth.is_server_admin(
886+
is_admin = await self.auth.is_server_admin(
888887
UserID.from_string(requester_user_id)
889888
)
890889

891890
if not is_admin:
892891
raise SynapseError(403, "User is not an admin")
893892

894893
# Before deleting the group lets kick everyone out of it
895-
users = yield self.store.get_users_in_group(group_id, include_private=True)
894+
users = await self.store.get_users_in_group(group_id, include_private=True)
896895

897-
@defer.inlineCallbacks
898-
def _kick_user_from_group(user_id):
896+
async def _kick_user_from_group(user_id):
899897
if self.hs.is_mine_id(user_id):
900898
groups_local = self.hs.get_groups_local_handler()
901-
yield groups_local.user_removed_from_group(group_id, user_id, {})
899+
await groups_local.user_removed_from_group(group_id, user_id, {})
902900
else:
903-
yield self.transport_client.remove_user_from_group_notification(
901+
await self.transport_client.remove_user_from_group_notification(
904902
get_domain_from_id(user_id), group_id, user_id, {}
905903
)
906-
yield self.store.maybe_delete_remote_profile_cache(user_id)
904+
await self.store.maybe_delete_remote_profile_cache(user_id)
907905

908906
# We kick users out in the order of:
909907
# 1. Non-admins
@@ -922,11 +920,11 @@ def _kick_user_from_group(user_id):
922920
else:
923921
non_admins.append(u["user_id"])
924922

925-
yield concurrently_execute(_kick_user_from_group, non_admins, 10)
926-
yield concurrently_execute(_kick_user_from_group, admins, 10)
927-
yield _kick_user_from_group(requester_user_id)
923+
await concurrently_execute(_kick_user_from_group, non_admins, 10)
924+
await concurrently_execute(_kick_user_from_group, admins, 10)
925+
await _kick_user_from_group(requester_user_id)
928926

929-
yield self.store.delete_group(group_id)
927+
await self.store.delete_group(group_id)
930928

931929

932930
def _parse_join_policy_from_contents(content):

synapse/handlers/_base.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,30 +126,28 @@ def ratelimit(self, requester, update=True, is_admin_redaction=False):
126126
retry_after_ms=int(1000 * (time_allowed - time_now))
127127
)
128128

129-
@defer.inlineCallbacks
130-
def maybe_kick_guest_users(self, event, context=None):
129+
async def maybe_kick_guest_users(self, event, context=None):
131130
# Technically this function invalidates current_state by changing it.
132131
# Hopefully this isn't that important to the caller.
133132
if event.type == EventTypes.GuestAccess:
134133
guest_access = event.content.get("guest_access", "forbidden")
135134
if guest_access != "can_join":
136135
if context:
137-
current_state_ids = yield context.get_current_state_ids()
138-
current_state = yield self.store.get_events(
136+
current_state_ids = await context.get_current_state_ids()
137+
current_state = await self.store.get_events(
139138
list(current_state_ids.values())
140139
)
141140
else:
142-
current_state = yield self.state_handler.get_current_state(
141+
current_state = await self.state_handler.get_current_state(
143142
event.room_id
144143
)
145144

146145
current_state = list(current_state.values())
147146

148147
logger.info("maybe_kick_guest_users %r", current_state)
149-
yield self.kick_guest_users(current_state)
148+
await self.kick_guest_users(current_state)
150149

151-
@defer.inlineCallbacks
152-
def kick_guest_users(self, current_state):
150+
async def kick_guest_users(self, current_state):
153151
for member_event in current_state:
154152
try:
155153
if member_event.type != EventTypes.Member:
@@ -180,7 +178,7 @@ def kick_guest_users(self, current_state):
180178
# homeserver.
181179
requester = synapse.types.create_requester(target_user, is_guest=True)
182180
handler = self.hs.get_room_member_handler()
183-
yield handler.update_membership(
181+
await handler.update_membership(
184182
requester,
185183
target_user,
186184
member_event.room_id,

0 commit comments

Comments
 (0)