mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-26 03:25:53 +03:00
Use the proper error code when a canonical alias that does not exist is used. (#7109)
This commit is contained in:
parent
e341518f92
commit
190ab593b7
2 changed files with 39 additions and 19 deletions
1
changelog.d/7109.bugfix
Normal file
1
changelog.d/7109.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Return the proper error (M_BAD_ALIAS) when a non-existant canonical alias is provided.
|
|
@ -851,6 +851,38 @@ class EventCreationHandler(object):
|
||||||
self.store.remove_push_actions_from_staging, event.event_id
|
self.store.remove_push_actions_from_staging, event.event_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def _validate_canonical_alias(
|
||||||
|
self, directory_handler, room_alias_str, expected_room_id
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Ensure that the given room alias points to the expected room ID.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
directory_handler: The directory handler object.
|
||||||
|
room_alias_str: The room alias to check.
|
||||||
|
expected_room_id: The room ID that the alias should point to.
|
||||||
|
"""
|
||||||
|
room_alias = RoomAlias.from_string(room_alias_str)
|
||||||
|
try:
|
||||||
|
mapping = yield directory_handler.get_association(room_alias)
|
||||||
|
except SynapseError as e:
|
||||||
|
# Turn M_NOT_FOUND errors into M_BAD_ALIAS errors.
|
||||||
|
if e.errcode == Codes.NOT_FOUND:
|
||||||
|
raise SynapseError(
|
||||||
|
400,
|
||||||
|
"Room alias %s does not point to the room" % (room_alias_str,),
|
||||||
|
Codes.BAD_ALIAS,
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
|
||||||
|
if mapping["room_id"] != expected_room_id:
|
||||||
|
raise SynapseError(
|
||||||
|
400,
|
||||||
|
"Room alias %s does not point to the room" % (room_alias_str,),
|
||||||
|
Codes.BAD_ALIAS,
|
||||||
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def persist_and_notify_client_event(
|
def persist_and_notify_client_event(
|
||||||
self, requester, event, context, ratelimit=True, extra_users=[]
|
self, requester, event, context, ratelimit=True, extra_users=[]
|
||||||
|
@ -905,15 +937,9 @@ class EventCreationHandler(object):
|
||||||
room_alias_str = event.content.get("alias", None)
|
room_alias_str = event.content.get("alias", None)
|
||||||
directory_handler = self.hs.get_handlers().directory_handler
|
directory_handler = self.hs.get_handlers().directory_handler
|
||||||
if room_alias_str and room_alias_str != original_alias:
|
if room_alias_str and room_alias_str != original_alias:
|
||||||
room_alias = RoomAlias.from_string(room_alias_str)
|
yield self._validate_canonical_alias(
|
||||||
mapping = yield directory_handler.get_association(room_alias)
|
directory_handler, room_alias_str, event.room_id
|
||||||
|
)
|
||||||
if mapping["room_id"] != event.room_id:
|
|
||||||
raise SynapseError(
|
|
||||||
400,
|
|
||||||
"Room alias %s does not point to the room" % (room_alias_str,),
|
|
||||||
Codes.BAD_ALIAS,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check that alt_aliases is the proper form.
|
# Check that alt_aliases is the proper form.
|
||||||
alt_aliases = event.content.get("alt_aliases", [])
|
alt_aliases = event.content.get("alt_aliases", [])
|
||||||
|
@ -931,16 +957,9 @@ class EventCreationHandler(object):
|
||||||
new_alt_aliases = set(alt_aliases) - set(original_alt_aliases)
|
new_alt_aliases = set(alt_aliases) - set(original_alt_aliases)
|
||||||
if new_alt_aliases:
|
if new_alt_aliases:
|
||||||
for alias_str in new_alt_aliases:
|
for alias_str in new_alt_aliases:
|
||||||
room_alias = RoomAlias.from_string(alias_str)
|
yield self._validate_canonical_alias(
|
||||||
mapping = yield directory_handler.get_association(room_alias)
|
directory_handler, alias_str, event.room_id
|
||||||
|
)
|
||||||
if mapping["room_id"] != event.room_id:
|
|
||||||
raise SynapseError(
|
|
||||||
400,
|
|
||||||
"Room alias %s does not point to the room"
|
|
||||||
% (room_alias_str,),
|
|
||||||
Codes.BAD_ALIAS,
|
|
||||||
)
|
|
||||||
|
|
||||||
federation_handler = self.hs.get_handlers().federation_handler
|
federation_handler = self.hs.get_handlers().federation_handler
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue