Integration: make the default urls modifiable from MatrixConfiguration
This commit is contained in:
parent
c815c4080d
commit
173c1d3a6e
|
@ -22,6 +22,8 @@ import java.net.Proxy
|
||||||
data class MatrixConfiguration(
|
data class MatrixConfiguration(
|
||||||
val applicationFlavor: String = "Default-application-flavor",
|
val applicationFlavor: String = "Default-application-flavor",
|
||||||
val cryptoConfig: MXCryptoConfig = MXCryptoConfig(),
|
val cryptoConfig: MXCryptoConfig = MXCryptoConfig(),
|
||||||
|
val integrationUIUrl: String = "https://scalar.vector.im/",
|
||||||
|
val integrationRestUrl: String = "https://scalar.vector.im/api",
|
||||||
/**
|
/**
|
||||||
* Optional proxy to connect to the matrix servers
|
* Optional proxy to connect to the matrix servers
|
||||||
* You can create one using for instance Proxy(proxyType, InetSocketAddress(hostname, port)
|
* You can create one using for instance Proxy(proxyType, InetSocketAddress(hostname, port)
|
||||||
|
|
|
@ -20,7 +20,7 @@ package im.vector.matrix.android.api.session.integrationmanager
|
||||||
*/
|
*/
|
||||||
data class IntegrationManagerConfig(
|
data class IntegrationManagerConfig(
|
||||||
val uiUrl: String,
|
val uiUrl: String,
|
||||||
val apiUrl: String,
|
val restUrl: String,
|
||||||
val kind: Kind
|
val kind: Kind
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,8 @@ import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.lifecycle.LifecycleRegistry
|
import androidx.lifecycle.LifecycleRegistry
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import im.vector.matrix.android.R
|
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.auth.wellknown.WellknownResult
|
import im.vector.matrix.android.api.MatrixConfiguration
|
||||||
import im.vector.matrix.android.api.session.events.model.toModel
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerConfig
|
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerConfig
|
||||||
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerService
|
import im.vector.matrix.android.api.session.integrationmanager.IntegrationManagerService
|
||||||
|
@ -31,7 +30,6 @@ import im.vector.matrix.android.api.session.widgets.model.WidgetType
|
||||||
import im.vector.matrix.android.api.util.Cancelable
|
import im.vector.matrix.android.api.util.Cancelable
|
||||||
import im.vector.matrix.android.api.util.NoOpCancellable
|
import im.vector.matrix.android.api.util.NoOpCancellable
|
||||||
import im.vector.matrix.android.internal.database.model.WellknownIntegrationManagerConfigEntity
|
import im.vector.matrix.android.internal.database.model.WellknownIntegrationManagerConfigEntity
|
||||||
import im.vector.matrix.android.internal.di.UserId
|
|
||||||
import im.vector.matrix.android.internal.extensions.observeNotNull
|
import im.vector.matrix.android.internal.extensions.observeNotNull
|
||||||
import im.vector.matrix.android.internal.session.SessionScope
|
import im.vector.matrix.android.internal.session.SessionScope
|
||||||
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountData
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountData
|
||||||
|
@ -43,9 +41,6 @@ import im.vector.matrix.android.internal.session.widgets.helper.extractWidgetSeq
|
||||||
import im.vector.matrix.android.internal.task.TaskExecutor
|
import im.vector.matrix.android.internal.task.TaskExecutor
|
||||||
import im.vector.matrix.android.internal.task.configureWith
|
import im.vector.matrix.android.internal.task.configureWith
|
||||||
import im.vector.matrix.android.internal.util.StringProvider
|
import im.vector.matrix.android.internal.util.StringProvider
|
||||||
import im.vector.matrix.android.internal.util.awaitTransaction
|
|
||||||
import im.vector.matrix.android.internal.wellknown.GetWellknownTask
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -62,14 +57,11 @@ import javax.inject.Inject
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@SessionScope
|
@SessionScope
|
||||||
internal class IntegrationManager @Inject constructor(@UserId private val userId: String,
|
internal class IntegrationManager @Inject constructor(matrixConfiguration: MatrixConfiguration,
|
||||||
private val taskExecutor: TaskExecutor,
|
private val taskExecutor: TaskExecutor,
|
||||||
private val monarchy: Monarchy,
|
private val monarchy: Monarchy,
|
||||||
private val stringProvider: StringProvider,
|
|
||||||
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
||||||
private val accountDataDataSource: AccountDataDataSource,
|
private val accountDataDataSource: AccountDataDataSource,
|
||||||
private val getWellknownTask: GetWellknownTask,
|
|
||||||
private val configExtractor: IntegrationManagerConfigExtractor,
|
|
||||||
private val widgetFactory: WidgetFactory) {
|
private val widgetFactory: WidgetFactory) {
|
||||||
|
|
||||||
private val currentConfigs = ArrayList<IntegrationManagerConfig>()
|
private val currentConfigs = ArrayList<IntegrationManagerConfig>()
|
||||||
|
@ -82,8 +74,8 @@ internal class IntegrationManager @Inject constructor(@UserId private val userId
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val defaultConfig = IntegrationManagerConfig(
|
val defaultConfig = IntegrationManagerConfig(
|
||||||
uiUrl = stringProvider.getString(R.string.integrations_ui_url),
|
uiUrl = matrixConfiguration.integrationUIUrl,
|
||||||
apiUrl = stringProvider.getString(R.string.integrations_rest_url),
|
restUrl = matrixConfiguration.integrationRestUrl,
|
||||||
kind = IntegrationManagerConfig.Kind.DEFAULT
|
kind = IntegrationManagerConfig.Kind.DEFAULT
|
||||||
)
|
)
|
||||||
currentConfigs.add(defaultConfig)
|
currentConfigs.add(defaultConfig)
|
||||||
|
@ -259,7 +251,7 @@ internal class IntegrationManager @Inject constructor(@UserId private val userId
|
||||||
val integrationManagerData = data.toModel<IntegrationManagerWidgetData>()
|
val integrationManagerData = data.toModel<IntegrationManagerWidgetData>()
|
||||||
return IntegrationManagerConfig(
|
return IntegrationManagerConfig(
|
||||||
uiUrl = url,
|
uiUrl = url,
|
||||||
apiUrl = integrationManagerData?.apiUrl ?: url,
|
restUrl = integrationManagerData?.apiUrl ?: url,
|
||||||
kind = IntegrationManagerConfig.Kind.ACCOUNT
|
kind = IntegrationManagerConfig.Kind.ACCOUNT
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,8 @@ internal class DefaultWidgetURLFormatter @Inject constructor(private val integra
|
||||||
val defaultWhiteList = stringProvider.getStringArray(R.array.integrations_widgets_urls).asList()
|
val defaultWhiteList = stringProvider.getStringArray(R.array.integrations_widgets_urls).asList()
|
||||||
whiteListedUrls = when (preferredConfig.kind) {
|
whiteListedUrls = when (preferredConfig.kind) {
|
||||||
IntegrationManagerConfig.Kind.DEFAULT -> defaultWhiteList
|
IntegrationManagerConfig.Kind.DEFAULT -> defaultWhiteList
|
||||||
IntegrationManagerConfig.Kind.ACCOUNT -> defaultWhiteList + preferredConfig.apiUrl
|
IntegrationManagerConfig.Kind.ACCOUNT -> defaultWhiteList + preferredConfig.restUrl
|
||||||
IntegrationManagerConfig.Kind.HOMESERVER -> listOf(preferredConfig.apiUrl)
|
IntegrationManagerConfig.Kind.HOMESERVER -> listOf(preferredConfig.restUrl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ internal class DefaultWidgetURLFormatter @Inject constructor(private val integra
|
||||||
*/
|
*/
|
||||||
override suspend fun format(baseUrl: String, params: Map<String, String>, forceFetchScalarToken: Boolean, bypassWhitelist: Boolean): String {
|
override suspend fun format(baseUrl: String, params: Map<String, String>, forceFetchScalarToken: Boolean, bypassWhitelist: Boolean): String {
|
||||||
return if (bypassWhitelist || isWhiteListed(baseUrl)) {
|
return if (bypassWhitelist || isWhiteListed(baseUrl)) {
|
||||||
val taskParams = GetScalarTokenTask.Params(currentConfig.apiUrl, forceFetchScalarToken)
|
val taskParams = GetScalarTokenTask.Params(currentConfig.restUrl, forceFetchScalarToken)
|
||||||
val scalarToken = getScalarTokenTask.execute(taskParams)
|
val scalarToken = getScalarTokenTask.execute(taskParams)
|
||||||
buildString {
|
buildString {
|
||||||
append(baseUrl)
|
append(baseUrl)
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Widget urls -->
|
|
||||||
<string name="integrations_ui_url" translatable="false">"https://scalar.vector.im/"</string>
|
|
||||||
<string name="integrations_rest_url" translatable="false">"https://scalar.vector.im/api"</string>
|
|
||||||
<string name="integrations_jitsi_widget_url" translatable="false">"https://scalar.vector.im/api/widgets/jitsi.html"</string>
|
|
||||||
|
|
||||||
<string-array name="integrations_widgets_urls" translatable="false">
|
<string-array name="integrations_widgets_urls" translatable="false">
|
||||||
<item>https://scalar.vector.im/_matrix/integrations/v1</item>
|
<item>https://scalar.vector.im/_matrix/integrations/v1</item>
|
||||||
<item>https://scalar.vector.im/api</item>
|
<item>https://scalar.vector.im/api</item>
|
||||||
|
|
Loading…
Reference in New Issue