diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-05-05 12:13:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-05 12:13:50 -0400 |
commit | 36df9c5e36cbad2a378d922085453726a21ae80c (patch) | |
tree | 536d44ca05802e32fa0adc05fcffcc97734d4648 /synapse/types | |
parent | Handle `DNSNotImplementedError` in SRV resolver (#15523) (diff) | |
download | synapse-36df9c5e36cbad2a378d922085453726a21ae80c.tar.xz |
Implement MSC4009 to widen the allowed Matrix ID grammar (#15536)
Behind a configuration flag this adds + to the list of allowed characters in Matrix IDs. The main feature this enables is using full E.164 phone numbers as Matrix IDs.
Diffstat (limited to 'synapse/types')
-rw-r--r-- | synapse/types/__init__.py | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/synapse/types/__init__.py b/synapse/types/__init__.py index 5cee9c3194..325219656a 100644 --- a/synapse/types/__init__.py +++ b/synapse/types/__init__.py @@ -335,18 +335,35 @@ class EventID(DomainSpecificString): mxid_localpart_allowed_characters = set( "_-./=" + string.ascii_lowercase + string.digits ) +# MSC4007 adds the + to the allowed characters. +# +# TODO If this was accepted, update the SSO code to support this, see the callers +# of map_username_to_mxid_localpart. +extended_mxid_localpart_allowed_characters = mxid_localpart_allowed_characters | {"+"} + +# Guest user IDs are purely numeric. +GUEST_USER_ID_PATTERN = re.compile(r"^\d+$") -def contains_invalid_mxid_characters(localpart: str) -> bool: +def contains_invalid_mxid_characters( + localpart: str, use_extended_character_set: bool +) -> bool: """Check for characters not allowed in an mxid or groupid localpart Args: localpart: the localpart to be checked + use_extended_character_set: True to use the extended allowed characters + from MSC4009. Returns: True if there are any naughty characters """ - return any(c not in mxid_localpart_allowed_characters for c in localpart) + allowed_characters = ( + extended_mxid_localpart_allowed_characters + if use_extended_character_set + else mxid_localpart_allowed_characters + ) + return any(c not in allowed_characters for c in localpart) UPPER_CASE_PATTERN = re.compile(b"[A-Z_]") |