mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-21 17:05:39 +03:00
Authenticated media : add versions check to HomeServerCapabilities
This commit is contained in:
parent
b0158f1a93
commit
7ad3ccfc60
8 changed files with 53 additions and 1 deletions
|
@ -95,6 +95,10 @@ data class HomeServerCapabilities(
|
||||||
* If set to true, the SDK will not use the network constraint when configuring Worker for the WorkManager, provided in Wellknown.
|
* If set to true, the SDK will not use the network constraint when configuring Worker for the WorkManager, provided in Wellknown.
|
||||||
*/
|
*/
|
||||||
val disableNetworkConstraint: Boolean? = null,
|
val disableNetworkConstraint: Boolean? = null,
|
||||||
|
/**
|
||||||
|
* True if the home server supports authenticated media.
|
||||||
|
*/
|
||||||
|
val canUseAuthenticatedMedia: Boolean = false,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
enum class RoomCapabilitySupport {
|
enum class RoomCapabilitySupport {
|
||||||
|
|
|
@ -61,5 +61,6 @@ internal data class HomeServerVersion(
|
||||||
val r0_6_1 = HomeServerVersion(major = 0, minor = 6, patch = 1)
|
val r0_6_1 = HomeServerVersion(major = 0, minor = 6, patch = 1)
|
||||||
val v1_3_0 = HomeServerVersion(major = 1, minor = 3, patch = 0)
|
val v1_3_0 = HomeServerVersion(major = 1, minor = 3, patch = 0)
|
||||||
val v1_4_0 = HomeServerVersion(major = 1, minor = 4, patch = 0)
|
val v1_4_0 = HomeServerVersion(major = 1, minor = 4, patch = 0)
|
||||||
|
val v1_11_0 = HomeServerVersion(major = 1, minor = 11, patch = 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ private const val FEATURE_ID_ACCESS_TOKEN = "m.id_access_token"
|
||||||
private const val FEATURE_SEPARATE_ADD_AND_BIND = "m.separate_add_and_bind"
|
private const val FEATURE_SEPARATE_ADD_AND_BIND = "m.separate_add_and_bind"
|
||||||
private const val FEATURE_THREADS_MSC3440 = "org.matrix.msc3440"
|
private const val FEATURE_THREADS_MSC3440 = "org.matrix.msc3440"
|
||||||
private const val FEATURE_THREADS_MSC3440_STABLE = "org.matrix.msc3440.stable"
|
private const val FEATURE_THREADS_MSC3440_STABLE = "org.matrix.msc3440.stable"
|
||||||
|
|
||||||
@Deprecated("The availability of stable get_login_token is now exposed as a capability and part of login flow")
|
@Deprecated("The availability of stable get_login_token is now exposed as a capability and part of login flow")
|
||||||
private const val FEATURE_QR_CODE_LOGIN = "org.matrix.msc3882"
|
private const val FEATURE_QR_CODE_LOGIN = "org.matrix.msc3882"
|
||||||
private const val FEATURE_THREADS_MSC3771 = "org.matrix.msc3771"
|
private const val FEATURE_THREADS_MSC3771 = "org.matrix.msc3771"
|
||||||
|
@ -142,6 +143,15 @@ internal fun Versions.doesServerSupportLogoutDevices(): Boolean {
|
||||||
return getMaxVersion() >= HomeServerVersion.r0_6_1
|
return getMaxVersion() >= HomeServerVersion.r0_6_1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate if the server supports MSC3916 : https://github.com/matrix-org/matrix-spec-proposals/pull/3916
|
||||||
|
*
|
||||||
|
* @return true if authenticated media is supported
|
||||||
|
*/
|
||||||
|
internal fun Versions.doesServerSupportAuthenticatedMedia(): Boolean {
|
||||||
|
return getMaxVersion() >= HomeServerVersion.v1_11_0
|
||||||
|
}
|
||||||
|
|
||||||
private fun Versions.getMaxVersion(): HomeServerVersion {
|
private fun Versions.getMaxVersion(): HomeServerVersion {
|
||||||
return supportedVersions
|
return supportedVersions
|
||||||
?.mapNotNull { HomeServerVersion.parse(it) }
|
?.mapNotNull { HomeServerVersion.parse(it) }
|
||||||
|
|
|
@ -71,6 +71,7 @@ import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo051
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo052
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo052
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo053
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo053
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo054
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo054
|
||||||
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo055
|
||||||
import org.matrix.android.sdk.internal.util.Normalizer
|
import org.matrix.android.sdk.internal.util.Normalizer
|
||||||
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
|
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -79,7 +80,7 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
||||||
private val normalizer: Normalizer
|
private val normalizer: Normalizer
|
||||||
) : MatrixRealmMigration(
|
) : MatrixRealmMigration(
|
||||||
dbName = "Session",
|
dbName = "Session",
|
||||||
schemaVersion = 54L,
|
schemaVersion = 55L,
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
* Forces all RealmSessionStoreMigration instances to be equal.
|
* Forces all RealmSessionStoreMigration instances to be equal.
|
||||||
|
@ -143,5 +144,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
||||||
if (oldVersion < 52) MigrateSessionTo052(realm).perform()
|
if (oldVersion < 52) MigrateSessionTo052(realm).perform()
|
||||||
if (oldVersion < 53) MigrateSessionTo053(realm).perform()
|
if (oldVersion < 53) MigrateSessionTo053(realm).perform()
|
||||||
if (oldVersion < 54) MigrateSessionTo054(realm).perform()
|
if (oldVersion < 54) MigrateSessionTo054(realm).perform()
|
||||||
|
if (oldVersion < 55) MigrateSessionTo055(realm).perform()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ internal object HomeServerCapabilitiesMapper {
|
||||||
externalAccountManagementUrl = entity.externalAccountManagementUrl,
|
externalAccountManagementUrl = entity.externalAccountManagementUrl,
|
||||||
authenticationIssuer = entity.authenticationIssuer,
|
authenticationIssuer = entity.authenticationIssuer,
|
||||||
disableNetworkConstraint = entity.disableNetworkConstraint,
|
disableNetworkConstraint = entity.disableNetworkConstraint,
|
||||||
|
canUseAuthenticatedMedia = entity.canUseAuthenticatedMedia,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 The Matrix.org Foundation C.I.C.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.internal.database.migration
|
||||||
|
|
||||||
|
import io.realm.DynamicRealm
|
||||||
|
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
|
||||||
|
import org.matrix.android.sdk.internal.extensions.forceRefreshOfHomeServerCapabilities
|
||||||
|
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||||
|
|
||||||
|
internal class MigrateSessionTo055(realm: DynamicRealm) : RealmMigrator(realm, 54) {
|
||||||
|
override fun doMigrate(realm: DynamicRealm) {
|
||||||
|
realm.schema.get("HomeServerCapabilitiesEntity")
|
||||||
|
?.addField(HomeServerCapabilitiesEntityFields.CAN_USE_AUTHENTICATED_MEDIA, Boolean::class.java)
|
||||||
|
?.forceRefreshOfHomeServerCapabilities()
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,6 +38,7 @@ internal open class HomeServerCapabilitiesEntity(
|
||||||
var externalAccountManagementUrl: String? = null,
|
var externalAccountManagementUrl: String? = null,
|
||||||
var authenticationIssuer: String? = null,
|
var authenticationIssuer: String? = null,
|
||||||
var disableNetworkConstraint: Boolean? = null,
|
var disableNetworkConstraint: Boolean? = null,
|
||||||
|
var canUseAuthenticatedMedia: Boolean = false,
|
||||||
) : RealmObject() {
|
) : RealmObject() {
|
||||||
|
|
||||||
companion object
|
companion object
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
|
||||||
import org.matrix.android.sdk.api.extensions.orTrue
|
import org.matrix.android.sdk.api.extensions.orTrue
|
||||||
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities
|
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities
|
||||||
import org.matrix.android.sdk.internal.auth.version.Versions
|
import org.matrix.android.sdk.internal.auth.version.Versions
|
||||||
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportAuthenticatedMedia
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportQrCodeLogin
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportQrCodeLogin
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportRedactionOfRelatedEvents
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportRedactionOfRelatedEvents
|
||||||
|
@ -155,6 +156,8 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor(
|
||||||
getVersionResult.doesServerSupportRemoteToggleOfPushNotifications()
|
getVersionResult.doesServerSupportRemoteToggleOfPushNotifications()
|
||||||
homeServerCapabilitiesEntity.canRedactEventWithRelations =
|
homeServerCapabilitiesEntity.canRedactEventWithRelations =
|
||||||
getVersionResult.doesServerSupportRedactionOfRelatedEvents()
|
getVersionResult.doesServerSupportRedactionOfRelatedEvents()
|
||||||
|
homeServerCapabilitiesEntity.canUseAuthenticatedMedia =
|
||||||
|
getVersionResult.doesServerSupportAuthenticatedMedia()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getWellknownResult != null && getWellknownResult is WellknownResult.Prompt) {
|
if (getWellknownResult != null && getWellknownResult is WellknownResult.Prompt) {
|
||||||
|
|
Loading…
Reference in a new issue