No longer use room alias events to calculate room names for push notifications. (#6966)

This commit is contained in:
Patrick Cloke 2020-02-21 12:50:48 -05:00 committed by GitHub
parent 7b0e2d961c
commit af6c389501
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 22 deletions

1
changelog.d/6966.removal Normal file
View file

@ -0,0 +1 @@
Synapse no longer uses room alias events to calculate room names for email notifications.

View file

@ -18,6 +18,8 @@ import re
from twisted.internet import defer from twisted.internet import defer
from synapse.api.constants import EventTypes
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# intentionally looser than what aliases we allow to be registered since # intentionally looser than what aliases we allow to be registered since
@ -50,17 +52,17 @@ def calculate_room_name(
(string or None) A human readable name for the room. (string or None) A human readable name for the room.
""" """
# does it have a name? # does it have a name?
if ("m.room.name", "") in room_state_ids: if (EventTypes.Name, "") in room_state_ids:
m_room_name = yield store.get_event( m_room_name = yield store.get_event(
room_state_ids[("m.room.name", "")], allow_none=True room_state_ids[(EventTypes.Name, "")], allow_none=True
) )
if m_room_name and m_room_name.content and m_room_name.content["name"]: if m_room_name and m_room_name.content and m_room_name.content["name"]:
return m_room_name.content["name"] return m_room_name.content["name"]
# does it have a canonical alias? # does it have a canonical alias?
if ("m.room.canonical_alias", "") in room_state_ids: if (EventTypes.CanonicalAlias, "") in room_state_ids:
canon_alias = yield store.get_event( canon_alias = yield store.get_event(
room_state_ids[("m.room.canonical_alias", "")], allow_none=True room_state_ids[(EventTypes.CanonicalAlias, "")], allow_none=True
) )
if ( if (
canon_alias canon_alias
@ -74,32 +76,22 @@ def calculate_room_name(
# for an event type, so rearrange the data structure # for an event type, so rearrange the data structure
room_state_bytype_ids = _state_as_two_level_dict(room_state_ids) room_state_bytype_ids = _state_as_two_level_dict(room_state_ids)
# right then, any aliases at all?
if "m.room.aliases" in room_state_bytype_ids:
m_room_aliases = room_state_bytype_ids["m.room.aliases"]
for alias_id in m_room_aliases.values():
alias_event = yield store.get_event(alias_id, allow_none=True)
if alias_event and alias_event.content.get("aliases"):
the_aliases = alias_event.content["aliases"]
if len(the_aliases) > 0 and _looks_like_an_alias(the_aliases[0]):
return the_aliases[0]
if not fallback_to_members: if not fallback_to_members:
return None return None
my_member_event = None my_member_event = None
if ("m.room.member", user_id) in room_state_ids: if (EventTypes.Member, user_id) in room_state_ids:
my_member_event = yield store.get_event( my_member_event = yield store.get_event(
room_state_ids[("m.room.member", user_id)], allow_none=True room_state_ids[(EventTypes.Member, user_id)], allow_none=True
) )
if ( if (
my_member_event is not None my_member_event is not None
and my_member_event.content["membership"] == "invite" and my_member_event.content["membership"] == "invite"
): ):
if ("m.room.member", my_member_event.sender) in room_state_ids: if (EventTypes.Member, my_member_event.sender) in room_state_ids:
inviter_member_event = yield store.get_event( inviter_member_event = yield store.get_event(
room_state_ids[("m.room.member", my_member_event.sender)], room_state_ids[(EventTypes.Member, my_member_event.sender)],
allow_none=True, allow_none=True,
) )
if inviter_member_event: if inviter_member_event:
@ -114,9 +106,9 @@ def calculate_room_name(
# we're going to have to generate a name based on who's in the room, # we're going to have to generate a name based on who's in the room,
# so find out who is in the room that isn't the user. # so find out who is in the room that isn't the user.
if "m.room.member" in room_state_bytype_ids: if EventTypes.Member in room_state_bytype_ids:
member_events = yield store.get_events( member_events = yield store.get_events(
list(room_state_bytype_ids["m.room.member"].values()) list(room_state_bytype_ids[EventTypes.Member].values())
) )
all_members = [ all_members = [
ev ev
@ -138,9 +130,9 @@ def calculate_room_name(
# self-chat, peeked room with 1 participant, # self-chat, peeked room with 1 participant,
# or inbound invite, or outbound 3PID invite. # or inbound invite, or outbound 3PID invite.
if all_members[0].sender == user_id: if all_members[0].sender == user_id:
if "m.room.third_party_invite" in room_state_bytype_ids: if EventTypes.ThirdPartyInvite in room_state_bytype_ids:
third_party_invites = room_state_bytype_ids[ third_party_invites = room_state_bytype_ids[
"m.room.third_party_invite" EventTypes.ThirdPartyInvite
].values() ].values()
if len(third_party_invites) > 0: if len(third_party_invites) > 0: