Skip to content

Commit 0fc3c4f

Browse files
authored
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
2 parents 6b7cb76 + d92a089 commit 0fc3c4f

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/MatrixPatterns.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,15 @@ object MatrixPatterns {
2828
private const val MATRIX_USER_IDENTIFIER_REGEX = "^@\\S*?$DOMAIN_REGEX$"
2929
private val PATTERN_CONTAIN_MATRIX_USER_IDENTIFIER = MATRIX_USER_IDENTIFIER_REGEX.toRegex()
3030

31-
// regex pattern to match room ids.
31+
// !localpart:domain" used in most room versions prior to MSC4291
3232
// Note: roomId can be arbitrary strings, including space and new line char
3333
private const val MATRIX_ROOM_IDENTIFIER_REGEX = "^!.+$DOMAIN_REGEX$"
3434
private val PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER = MATRIX_ROOM_IDENTIFIER_REGEX.toRegex(RegexOption.DOT_MATCHES_ALL)
3535

36+
// "!event_id_base_64" used in room versions post MSC4291
37+
private const val MATRIX_ROOM_IDENTIFIER_DOMAINLESS_REGEX = "!$BASE_64_URL_SAFE_ALPHABET"
38+
private val PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER_DOMAINLESS = MATRIX_ROOM_IDENTIFIER_DOMAINLESS_REGEX.toRegex()
39+
3640
// regex pattern to match room aliases.
3741
private const val MATRIX_ROOM_ALIAS_REGEX = "^#\\S+$DOMAIN_REGEX$"
3842
private val PATTERN_CONTAIN_MATRIX_ALIAS = MATRIX_ROOM_ALIAS_REGEX.toRegex(RegexOption.IGNORE_CASE)
@@ -82,7 +86,8 @@ object MatrixPatterns {
8286
fun isRoomId(str: String?): Boolean {
8387
return str != null &&
8488
str.length <= MAX_IDENTIFIER_LENGTH &&
85-
str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER
89+
(str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER_DOMAINLESS ||
90+
str matches PATTERN_CONTAIN_MATRIX_ROOM_IDENTIFIER)
8691
}
8792

8893
/**

libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/core/MatrixPatternsTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@ class MatrixPatternsTest {
9494
assertThat(MatrixPatterns.isRoomId("#room:server.com")).isFalse()
9595
assertThat(MatrixPatterns.isRoomId("\$room:server.com")).isFalse()
9696
assertThat(MatrixPatterns.isRoomId("!${longLocalPart}a:server.com")).isFalse()
97+
assertThat(MatrixPatterns.isRoomId("!9BozuV4TBw6rfRW@rMEgZ5v-jNk1D6FA8Hd1OsWqT9k")).isFalse()
9798

99+
assertThat(MatrixPatterns.isRoomId("!9BozuV4TBw6rfRW3rMEgZ5v-jNk1D6FA8Hd1OsWqT9k")).isTrue()
98100
assertThat(MatrixPatterns.isRoomId("!room:server.com")).isTrue()
99101
assertThat(MatrixPatterns.isRoomId("!$longLocalPart:server.com")).isTrue()
100102
assertThat(MatrixPatterns.isRoomId("!#test/room\nversion <u>11</u>, with @🐈️:maunium.net")).isTrue()

0 commit comments

Comments
 (0)