@@ -851,6 +851,38 @@ def handle_new_client_event(
851
851
self .store .remove_push_actions_from_staging , event .event_id
852
852
)
853
853
854
+ @defer .inlineCallbacks
855
+ def _validate_canonical_alias (
856
+ self , directory_handler , room_alias_str , expected_room_id
857
+ ):
858
+ """
859
+ Ensure that the given room alias points to the expected room ID.
860
+
861
+ Args:
862
+ directory_handler: The directory handler object.
863
+ room_alias_str: The room alias to check.
864
+ expected_room_id: The room ID that the alias should point to.
865
+ """
866
+ room_alias = RoomAlias .from_string (room_alias_str )
867
+ try :
868
+ mapping = yield directory_handler .get_association (room_alias )
869
+ except SynapseError as e :
870
+ # Turn M_NOT_FOUND errors into M_BAD_ALIAS errors.
871
+ if e .errcode == Codes .NOT_FOUND :
872
+ raise SynapseError (
873
+ 400 ,
874
+ "Room alias %s does not point to the room" % (room_alias_str ,),
875
+ Codes .BAD_ALIAS ,
876
+ )
877
+ raise
878
+
879
+ if mapping ["room_id" ] != expected_room_id :
880
+ raise SynapseError (
881
+ 400 ,
882
+ "Room alias %s does not point to the room" % (room_alias_str ,),
883
+ Codes .BAD_ALIAS ,
884
+ )
885
+
854
886
@defer .inlineCallbacks
855
887
def persist_and_notify_client_event (
856
888
self , requester , event , context , ratelimit = True , extra_users = []
@@ -905,15 +937,9 @@ def persist_and_notify_client_event(
905
937
room_alias_str = event .content .get ("alias" , None )
906
938
directory_handler = self .hs .get_handlers ().directory_handler
907
939
if room_alias_str and room_alias_str != original_alias :
908
- room_alias = RoomAlias .from_string (room_alias_str )
909
- mapping = yield directory_handler .get_association (room_alias )
910
-
911
- if mapping ["room_id" ] != event .room_id :
912
- raise SynapseError (
913
- 400 ,
914
- "Room alias %s does not point to the room" % (room_alias_str ,),
915
- Codes .BAD_ALIAS ,
916
- )
940
+ yield self ._validate_canonical_alias (
941
+ directory_handler , room_alias_str , event .room_id
942
+ )
917
943
918
944
# Check that alt_aliases is the proper form.
919
945
alt_aliases = event .content .get ("alt_aliases" , [])
@@ -931,16 +957,9 @@ def persist_and_notify_client_event(
931
957
new_alt_aliases = set (alt_aliases ) - set (original_alt_aliases )
932
958
if new_alt_aliases :
933
959
for alias_str in new_alt_aliases :
934
- room_alias = RoomAlias .from_string (alias_str )
935
- mapping = yield directory_handler .get_association (room_alias )
936
-
937
- if mapping ["room_id" ] != event .room_id :
938
- raise SynapseError (
939
- 400 ,
940
- "Room alias %s does not point to the room"
941
- % (room_alias_str ,),
942
- Codes .BAD_ALIAS ,
943
- )
960
+ yield self ._validate_canonical_alias (
961
+ directory_handler , alias_str , event .room_id
962
+ )
944
963
945
964
federation_handler = self .hs .get_handlers ().federation_handler
946
965
0 commit comments