Create fun String.getDomain(): String to avoid duplicated code

This commit is contained in:
Benoit Marty 2021-07-05 16:49:09 +02:00
parent 67f41028ff
commit d29e04f16c
12 changed files with 39 additions and 13 deletions

View File

@ -16,6 +16,8 @@
package org.matrix.android.sdk.api package org.matrix.android.sdk.api
import org.matrix.android.sdk.BuildConfig
/** /**
* This class contains pattern to match the different Matrix ids * 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 (~), * 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. * 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 return order != null && order.length < 50 && order matches ORDER_STRING_REGEX
} }
@ -163,4 +165,17 @@ object MatrixPatterns {
"[^a-z0-9._%#@=+-]".toRegex().replace(it, "") "[^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(":")
}
} }

View File

@ -20,6 +20,7 @@ import android.net.Uri
import dagger.Lazy import dagger.Lazy
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import org.matrix.android.sdk.api.MatrixPatterns 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.AuthenticationService
import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
@ -379,7 +380,7 @@ internal class DefaultAuthenticationService @Inject constructor(
} }
return getWellknownTask.execute(GetWellknownTask.Params( return getWellknownTask.execute(GetWellknownTask.Params(
domain = matrixId.substringAfter(":"), domain = matrixId.getDomain(),
homeServerConnectionConfig = homeServerConnectionConfig) homeServerConnectionConfig = homeServerConnectionConfig)
) )
} }

View File

@ -17,6 +17,7 @@
package org.matrix.android.sdk.internal.session.homeserver package org.matrix.android.sdk.internal.session.homeserver
import com.zhuinden.monarchy.Monarchy 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.data.HomeServerConnectionConfig
import org.matrix.android.sdk.api.auth.wellknown.WellknownResult import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities
@ -90,7 +91,7 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor(
val wellknownResult = runCatching { val wellknownResult = runCatching {
getWellknownTask.execute(GetWellknownTask.Params( getWellknownTask.execute(GetWellknownTask.Params(
domain = userId.substringAfter(":"), domain = userId.getDomain(),
homeServerConnectionConfig = homeServerConnectionConfig homeServerConnectionConfig = homeServerConnectionConfig
)) ))
}.getOrNull() }.getOrNull()

View File

@ -16,6 +16,7 @@
package org.matrix.android.sdk.internal.session.permalinks 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.members.roomMemberQueryParams
import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.Membership
import org.matrix.android.sdk.internal.di.UserId 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> { fun computeViaParams(userId: String, roomId: String, max: Int): List<String> {
val userHomeserver = userId.substringAfter(":") val userHomeserver = userId.getDomain()
return getUserIdsOfJoinedMembers(roomId) return getUserIdsOfJoinedMembers(roomId)
.map { it.substringAfter(":") } .map { it.getDomain() }
.groupBy { it } .groupBy { it }
.mapValues { it.value.size } .mapValues { it.value.size }
.toMutableMap() .toMutableMap()

View File

@ -16,6 +16,7 @@
package org.matrix.android.sdk.internal.session.room.alias 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.failure.Failure
import org.matrix.android.sdk.api.session.room.alias.RoomAliasError import org.matrix.android.sdk.api.session.room.alias.RoomAliasError
import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.di.UserId
@ -64,6 +65,6 @@ internal class RoomAliasAvailabilityChecker @Inject constructor(
} }
companion object { companion object {
internal fun String.toFullLocalAlias(userId: String) = "#" + this + ":" + userId.substringAfter(":") internal fun String.toFullLocalAlias(userId: String) = "#" + this + ":" + userId.getDomain()
} }
} }

View File

@ -40,6 +40,7 @@ import im.vector.app.core.utils.ensureTrailingSlash
import im.vector.app.features.signout.soft.SoftLogoutActivity import im.vector.app.features.signout.soft.SoftLogoutActivity
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch 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.AuthenticationService
import org.matrix.android.sdk.api.auth.HomeServerHistoryService import org.matrix.android.sdk.api.auth.HomeServerHistoryService
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
@ -597,7 +598,7 @@ class LoginViewModel @AssistedInject constructor(
identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) } identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) }
) )
?: HomeServerConnectionConfig( ?: HomeServerConnectionConfig(
homeServerUri = Uri.parse("https://${action.username.substringAfter(":")}"), homeServerUri = Uri.parse("https://${action.username.getDomain()}"),
homeServerUriBase = Uri.parse(wellKnownPrompt.homeServerUrl), homeServerUriBase = Uri.parse(wellKnownPrompt.homeServerUrl),
identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) } identityServerUri = wellKnownPrompt.identityServerUrl?.let { Uri.parse(it) }
) )

View File

@ -41,6 +41,7 @@ import im.vector.app.features.login.LoginMode
import im.vector.app.features.login.ReAuthHelper import im.vector.app.features.login.ReAuthHelper
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch 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.AuthenticationService
import org.matrix.android.sdk.api.auth.HomeServerHistoryService import org.matrix.android.sdk.api.auth.HomeServerHistoryService
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
@ -651,7 +652,7 @@ class LoginViewModel2 @AssistedInject constructor(
} }
viewEvent?.let { _viewEvents.post(it) } viewEvent?.let { _viewEvents.post(it) }
val urlFromUser = action.username.substringAfter(":") val urlFromUser = action.username.getDomain()
setState { setState {
copy( copy(
isLoading = false, isLoading = false,

View File

@ -16,13 +16,14 @@
package im.vector.app.features.raw.wellknown 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.auth.data.SessionParams
import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.raw.RawService
suspend fun RawService.getElementWellknown(sessionParams: SessionParams): ElementWellKnown? { suspend fun RawService.getElementWellknown(sessionParams: SessionParams): ElementWellKnown? {
// By default we use the domain of the userId to retrieve the .well-known data // 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) } return tryOrNull { getWellknown(domain) }
?.let { ElementWellKnownMapper.from(it) } ?.let { ElementWellKnownMapper.from(it) }
} }

View File

@ -34,6 +34,7 @@ import im.vector.app.features.raw.wellknown.getElementWellknown
import im.vector.app.features.raw.wellknown.isE2EByDefault import im.vector.app.features.raw.wellknown.isE2EByDefault
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch 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.extensions.tryOrNull
import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
@ -62,7 +63,7 @@ class CreateRoomViewModel @AssistedInject constructor(@Assisted private val init
private fun initHomeServerName() { private fun initHomeServerName() {
setState { setState {
copy( copy(
homeServerName = session.myUserId.substringAfter(":") homeServerName = session.myUserId.getDomain()
) )
} }
} }

View File

@ -20,6 +20,7 @@ import im.vector.app.R
import im.vector.app.core.resources.StringArrayProvider import im.vector.app.core.resources.StringArrayProvider
import im.vector.app.features.roomdirectory.RoomDirectoryData import im.vector.app.features.roomdirectory.RoomDirectoryData
import im.vector.app.features.roomdirectory.RoomDirectoryServer 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.Session
import org.matrix.android.sdk.api.session.room.model.thirdparty.ThirdPartyProtocol import org.matrix.android.sdk.api.session.room.model.thirdparty.ThirdPartyProtocol
import javax.inject.Inject import javax.inject.Inject
@ -36,7 +37,7 @@ class RoomDirectoryListCreator @Inject constructor(
val protocols = ArrayList<RoomDirectoryData>() val protocols = ArrayList<RoomDirectoryData>()
// Add user homeserver name // Add user homeserver name
val userHsName = session.myUserId.substringAfter(":") val userHsName = session.myUserId.getDomain()
// Add default protocol // Add default protocol
protocols.add( protocols.add(

View File

@ -31,6 +31,7 @@ import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
import kotlinx.coroutines.launch 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.query.QueryStringValue
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.EventType
@ -101,7 +102,7 @@ class RoomAliasViewModel @AssistedInject constructor(@Assisted initialState: Roo
private fun initHomeServerName() { private fun initHomeServerName() {
setState { setState {
copy( copy(
homeServerName = session.myUserId.substringAfter(":") homeServerName = session.myUserId.getDomain()
) )
} }
} }

View File

@ -36,6 +36,7 @@ import im.vector.app.core.resources.StringProvider
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixPatterns 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.Session
import org.matrix.android.sdk.api.session.room.AliasAvailabilityResult import org.matrix.android.sdk.api.session.room.AliasAvailabilityResult
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
@ -51,7 +52,7 @@ class CreateSpaceViewModel @AssistedInject constructor(
init { init {
setState { setState {
copy( copy(
homeServerName = session.myUserId.substringAfter(":") homeServerName = session.myUserId.getDomain()
) )
} }
} }