From d29e04f16c0b3bcf0f5eca94550cc190b260fb22 Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoit@matrix.org> Date: Mon, 5 Jul 2021 16:49:09 +0200 Subject: [PATCH] Create fun String.getDomain(): String to avoid duplicated code --- .../matrix/android/sdk/api/MatrixPatterns.kt | 17 ++++++++++++++++- .../auth/DefaultAuthenticationService.kt | 3 ++- .../homeserver/GetHomeServerCapabilitiesTask.kt | 3 ++- .../session/permalinks/ViaParameterFinder.kt | 5 +++-- .../room/alias/RoomAliasAvailabilityChecker.kt | 3 ++- .../vector/app/features/login/LoginViewModel.kt | 3 ++- .../app/features/login2/LoginViewModel2.kt | 3 ++- .../raw/wellknown/ElementWellKnownExt.kt | 3 ++- .../createroom/CreateRoomViewModel.kt | 3 ++- .../picker/RoomDirectoryListCreator.kt | 3 ++- .../roomprofile/alias/RoomAliasViewModel.kt | 3 ++- .../spaces/create/CreateSpaceViewModel.kt | 3 ++- 12 files changed, 39 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt index 7f5f3f54ef..3af1a22779 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt @@ -16,6 +16,8 @@ package org.matrix.android.sdk.api +import org.matrix.android.sdk.BuildConfig + /** * This class contains pattern to match the different Matrix ids */ @@ -154,7 +156,7 @@ object MatrixPatterns { * Orders which are not strings, or do not consist solely of ascii characters in the range \x20 (space) to \x7E (~), * or consist of more than 50 characters, are forbidden and the field should be ignored if received. */ - fun isValidOrderString(order: String?) : Boolean { + fun isValidOrderString(order: String?): Boolean { return order != null && order.length < 50 && order matches ORDER_STRING_REGEX } @@ -163,4 +165,17 @@ object MatrixPatterns { "[^a-z0-9._%#@=+-]".toRegex().replace(it, "") } } + + /** + * Return the domain form a userId + * Examples: + * - "@alice:domain.org".getDomain() will return "domain.org" + * - "@bob:domain.org:3455".getDomain() will return "domain.org:3455" + */ + fun String.getDomain(): String { + if (BuildConfig.DEBUG) { + assert(isUserId(this)) + } + return substringAfter(":") + } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt index 1a743ff12a..e76dc28734 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt @@ -20,6 +20,7 @@ import android.net.Uri import dagger.Lazy import okhttp3.OkHttpClient import org.matrix.android.sdk.api.MatrixPatterns +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.AuthenticationService import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig @@ -379,7 +380,7 @@ internal class DefaultAuthenticationService @Inject constructor( } return getWellknownTask.execute(GetWellknownTask.Params( - domain = matrixId.substringAfter(":"), + domain = matrixId.getDomain(), homeServerConnectionConfig = homeServerConnectionConfig) ) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt index 7b9a304c96..712099d68a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt @@ -17,6 +17,7 @@ package org.matrix.android.sdk.internal.session.homeserver import com.zhuinden.monarchy.Monarchy +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.wellknown.WellknownResult import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities @@ -90,7 +91,7 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor( val wellknownResult = runCatching { getWellknownTask.execute(GetWellknownTask.Params( - domain = userId.substringAfter(":"), + domain = userId.getDomain(), homeServerConnectionConfig = homeServerConnectionConfig )) }.getOrNull() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/ViaParameterFinder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/ViaParameterFinder.kt index 72fbfcced5..82565d8118 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/ViaParameterFinder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/ViaParameterFinder.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.permalinks +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.session.room.members.roomMemberQueryParams import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.internal.di.UserId @@ -47,9 +48,9 @@ internal class ViaParameterFinder @Inject constructor( } fun computeViaParams(userId: String, roomId: String, max: Int): List<String> { - val userHomeserver = userId.substringAfter(":") + val userHomeserver = userId.getDomain() return getUserIdsOfJoinedMembers(roomId) - .map { it.substringAfter(":") } + .map { it.getDomain() } .groupBy { it } .mapValues { it.value.size } .toMutableMap() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasAvailabilityChecker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasAvailabilityChecker.kt index 66164c5280..7c137a8102 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasAvailabilityChecker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasAvailabilityChecker.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.room.alias +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.session.room.alias.RoomAliasError import org.matrix.android.sdk.internal.di.UserId @@ -64,6 +65,6 @@ internal class RoomAliasAvailabilityChecker @Inject constructor( } companion object { - internal fun String.toFullLocalAlias(userId: String) = "#" + this + ":" + userId.substringAfter(":") + internal fun String.toFullLocalAlias(userId: String) = "#" + this + ":" + userId.getDomain() } } diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index 4629106519..2c4ad8b40d 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -40,6 +40,7 @@ import im.vector.app.core.utils.ensureTrailingSlash import im.vector.app.features.signout.soft.SoftLogoutActivity import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.AuthenticationService import org.matrix.android.sdk.api.auth.HomeServerHistoryService import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig @@ -597,7 +598,7 @@ class LoginViewModel @AssistedInject constructor( identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) } ) ?: HomeServerConnectionConfig( - homeServerUri = Uri.parse("https://${action.username.substringAfter(":")}"), + homeServerUri = Uri.parse("https://${action.username.getDomain()}"), homeServerUriBase = Uri.parse(wellKnownPrompt.homeServerUrl), identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) } ) diff --git a/vector/src/main/java/im/vector/app/features/login2/LoginViewModel2.kt b/vector/src/main/java/im/vector/app/features/login2/LoginViewModel2.kt index d0da12e6ed..13d819c284 100644 --- a/vector/src/main/java/im/vector/app/features/login2/LoginViewModel2.kt +++ b/vector/src/main/java/im/vector/app/features/login2/LoginViewModel2.kt @@ -41,6 +41,7 @@ import im.vector.app.features.login.LoginMode import im.vector.app.features.login.ReAuthHelper import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.AuthenticationService import org.matrix.android.sdk.api.auth.HomeServerHistoryService import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig @@ -651,7 +652,7 @@ class LoginViewModel2 @AssistedInject constructor( } viewEvent?.let { _viewEvents.post(it) } - val urlFromUser = action.username.substringAfter(":") + val urlFromUser = action.username.getDomain() setState { copy( isLoading = false, diff --git a/vector/src/main/java/im/vector/app/features/raw/wellknown/ElementWellKnownExt.kt b/vector/src/main/java/im/vector/app/features/raw/wellknown/ElementWellKnownExt.kt index a6959ff116..4dd5a68673 100644 --- a/vector/src/main/java/im/vector/app/features/raw/wellknown/ElementWellKnownExt.kt +++ b/vector/src/main/java/im/vector/app/features/raw/wellknown/ElementWellKnownExt.kt @@ -16,13 +16,14 @@ package im.vector.app.features.raw.wellknown +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.data.SessionParams import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.raw.RawService suspend fun RawService.getElementWellknown(sessionParams: SessionParams): ElementWellKnown? { // By default we use the domain of the userId to retrieve the .well-known data - val domain = sessionParams.userId.substringAfter(":") + val domain = sessionParams.userId.getDomain() return tryOrNull { getWellknown(domain) } ?.let { ElementWellKnownMapper.from(it) } } diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomViewModel.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomViewModel.kt index bd7e176247..ff62136267 100644 --- a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomViewModel.kt @@ -34,6 +34,7 @@ import im.vector.app.features.raw.wellknown.getElementWellknown import im.vector.app.features.raw.wellknown.isE2EByDefault import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.session.Session @@ -62,7 +63,7 @@ class CreateRoomViewModel @AssistedInject constructor(@Assisted private val init private fun initHomeServerName() { setState { copy( - homeServerName = session.myUserId.substringAfter(":") + homeServerName = session.myUserId.getDomain() ) } } diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryListCreator.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryListCreator.kt index 65d8f2d1cb..90283de77c 100644 --- a/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryListCreator.kt +++ b/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryListCreator.kt @@ -20,6 +20,7 @@ import im.vector.app.R import im.vector.app.core.resources.StringArrayProvider import im.vector.app.features.roomdirectory.RoomDirectoryData import im.vector.app.features.roomdirectory.RoomDirectoryServer +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.model.thirdparty.ThirdPartyProtocol import javax.inject.Inject @@ -36,7 +37,7 @@ class RoomDirectoryListCreator @Inject constructor( val protocols = ArrayList<RoomDirectoryData>() // Add user homeserver name - val userHsName = session.myUserId.substringAfter(":") + val userHsName = session.myUserId.getDomain() // Add default protocol protocols.add( diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt index 8832c9f7d8..b8a0149198 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt @@ -31,6 +31,7 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.powerlevel.PowerLevelsObservableFactory import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType @@ -101,7 +102,7 @@ class RoomAliasViewModel @AssistedInject constructor(@Assisted initialState: Roo private fun initHomeServerName() { setState { copy( - homeServerName = session.myUserId.substringAfter(":") + homeServerName = session.myUserId.getDomain() ) } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt index 60110b7dd5..2537a3a592 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/create/CreateSpaceViewModel.kt @@ -36,6 +36,7 @@ import im.vector.app.core.resources.StringProvider import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.matrix.android.sdk.api.MatrixPatterns +import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.AliasAvailabilityResult import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure @@ -51,7 +52,7 @@ class CreateSpaceViewModel @AssistedInject constructor( init { setState { copy( - homeServerName = session.myUserId.substringAfter(":") + homeServerName = session.myUserId.getDomain() ) } }