Merge pull request #5040 from element-hq/feature/fga/relax_room_id_regex_pattern

misc (room id) : add room id regex pattern to match new versions
This commit is contained in:
ganfra
2025-07-17 21:33:32 +02:00
committed by GitHub
2 changed files with 9 additions and 2 deletions

View File

@@ -28,11 +28,15 @@ object MatrixPatterns {
private const val MATRIX_USER_IDENTIFIER_REGEX = "^@\\S*?$DOMAIN_REGEX$"
private val PATTERN_CONTAIN_MATRIX_USER_IDENTIFIER = MATRIX_USER_IDENTIFIER_REGEX.toRegex()
// regex pattern to match room ids.
// !localpart:domain" used in most room versions prior to MSC4291
// Note: roomId can be arbitrary strings, including space and new line char
private const val MATRIX_ROOM_IDENTIFIER_REGEX = "^!.+$DOMAIN_REGEX$"
private val PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER = MATRIX_ROOM_IDENTIFIER_REGEX.toRegex(RegexOption.DOT_MATCHES_ALL)
// "!event_id_base_64" used in room versions post MSC4291
private const val MATRIX_ROOM_IDENTIFIER_DOMAINLESS_REGEX = "!$BASE_64_URL_SAFE_ALPHABET"
private val PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER_DOMAINLESS = MATRIX_ROOM_IDENTIFIER_DOMAINLESS_REGEX.toRegex()
// regex pattern to match room aliases.
private const val MATRIX_ROOM_ALIAS_REGEX = "^#\\S+$DOMAIN_REGEX$"
private val PATTERN_CONTAIN_MATRIX_ALIAS = MATRIX_ROOM_ALIAS_REGEX.toRegex(RegexOption.IGNORE_CASE)
@@ -82,7 +86,8 @@ object MatrixPatterns {
fun isRoomId(str: String?): Boolean {
return str != null &&
str.length <= MAX_IDENTIFIER_LENGTH &&
str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER
(str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER_DOMAINLESS ||
str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER)
}
/**

View File

@@ -94,7 +94,9 @@ class MatrixPatternsTest {
assertThat(MatrixPatterns.isRoomId("#room:server.com")).isFalse()
assertThat(MatrixPatterns.isRoomId("\$room:server.com")).isFalse()
assertThat(MatrixPatterns.isRoomId("!${longLocalPart}a:server.com")).isFalse()
assertThat(MatrixPatterns.isRoomId("!9BozuV4TBw6rfRW@rMEgZ5v-jNk1D6FA8Hd1OsWqT9k")).isFalse()
assertThat(MatrixPatterns.isRoomId("!9BozuV4TBw6rfRW3rMEgZ5v-jNk1D6FA8Hd1OsWqT9k")).isTrue()
assertThat(MatrixPatterns.isRoomId("!room:server.com")).isTrue()
assertThat(MatrixPatterns.isRoomId("!$longLocalPart:server.com")).isTrue()
assertThat(MatrixPatterns.isRoomId("!#test/room\nversion <u>11</u>, with @🐈️:maunium.net")).isTrue()