Skip to content

Commit 7ad3ccf

Browse files
committed
Authenticated media : add versions check to HomeServerCapabilities
1 parent b0158f1 commit 7ad3ccf

File tree

8 files changed

+53
-1
lines changed

8 files changed

+53
-1
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ data class HomeServerCapabilities(
9595
* If set to true, the SDK will not use the network constraint when configuring Worker for the WorkManager, provided in Wellknown.
9696
*/
9797
val disableNetworkConstraint: Boolean? = null,
98+
/**
99+
* True if the home server supports authenticated media.
100+
*/
101+
val canUseAuthenticatedMedia: Boolean = false,
98102
) {
99103

100104
enum class RoomCapabilitySupport {

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/HomeServerVersion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,6 @@ internal data class HomeServerVersion(
6161
val r0_6_1 = HomeServerVersion(major = 0, minor = 6, patch = 1)
6262
val v1_3_0 = HomeServerVersion(major = 1, minor = 3, patch = 0)
6363
val v1_4_0 = HomeServerVersion(major = 1, minor = 4, patch = 0)
64+
val v1_11_0 = HomeServerVersion(major = 1, minor = 11, patch = 0)
6465
}
6566
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ private const val FEATURE_ID_ACCESS_TOKEN = "m.id_access_token"
5454
private const val FEATURE_SEPARATE_ADD_AND_BIND = "m.separate_add_and_bind"
5555
private const val FEATURE_THREADS_MSC3440 = "org.matrix.msc3440"
5656
private const val FEATURE_THREADS_MSC3440_STABLE = "org.matrix.msc3440.stable"
57+
5758
@Deprecated("The availability of stable get_login_token is now exposed as a capability and part of login flow")
5859
private const val FEATURE_QR_CODE_LOGIN = "org.matrix.msc3882"
5960
private const val FEATURE_THREADS_MSC3771 = "org.matrix.msc3771"
@@ -142,6 +143,15 @@ internal fun Versions.doesServerSupportLogoutDevices(): Boolean {
142143
return getMaxVersion() >= HomeServerVersion.r0_6_1
143144
}
144145

146+
/**
147+
* Indicate if the server supports MSC3916 : https://github.com/matrix-org/matrix-spec-proposals/pull/3916
148+
*
149+
* @return true if authenticated media is supported
150+
*/
151+
internal fun Versions.doesServerSupportAuthenticatedMedia(): Boolean {
152+
return getMaxVersion() >= HomeServerVersion.v1_11_0
153+
}
154+
145155
private fun Versions.getMaxVersion(): HomeServerVersion {
146156
return supportedVersions
147157
?.mapNotNull { HomeServerVersion.parse(it) }

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo051
7171
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo052
7272
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo053
7373
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo054
74+
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo055
7475
import org.matrix.android.sdk.internal.util.Normalizer
7576
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
7677
import javax.inject.Inject
@@ -79,7 +80,7 @@ internal class RealmSessionStoreMigration @Inject constructor(
7980
private val normalizer: Normalizer
8081
) : MatrixRealmMigration(
8182
dbName = "Session",
82-
schemaVersion = 54L,
83+
schemaVersion = 55L,
8384
) {
8485
/**
8586
* Forces all RealmSessionStoreMigration instances to be equal.
@@ -143,5 +144,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
143144
if (oldVersion < 52) MigrateSessionTo052(realm).perform()
144145
if (oldVersion < 53) MigrateSessionTo053(realm).perform()
145146
if (oldVersion < 54) MigrateSessionTo054(realm).perform()
147+
if (oldVersion < 55) MigrateSessionTo055(realm).perform()
146148
}
147149
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/HomeServerCapabilitiesMapper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ internal object HomeServerCapabilitiesMapper {
5151
externalAccountManagementUrl = entity.externalAccountManagementUrl,
5252
authenticationIssuer = entity.authenticationIssuer,
5353
disableNetworkConstraint = entity.disableNetworkConstraint,
54+
canUseAuthenticatedMedia = entity.canUseAuthenticatedMedia,
5455
)
5556
}
5657

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2024 The Matrix.org Foundation C.I.C.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.matrix.android.sdk.internal.database.migration
18+
19+
import io.realm.DynamicRealm
20+
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
21+
import org.matrix.android.sdk.internal.extensions.forceRefreshOfHomeServerCapabilities
22+
import org.matrix.android.sdk.internal.util.database.RealmMigrator
23+
24+
internal class MigrateSessionTo055(realm: DynamicRealm) : RealmMigrator(realm, 54) {
25+
override fun doMigrate(realm: DynamicRealm) {
26+
realm.schema.get("HomeServerCapabilitiesEntity")
27+
?.addField(HomeServerCapabilitiesEntityFields.CAN_USE_AUTHENTICATED_MEDIA, Boolean::class.java)
28+
?.forceRefreshOfHomeServerCapabilities()
29+
}
30+
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/HomeServerCapabilitiesEntity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ internal open class HomeServerCapabilitiesEntity(
3838
var externalAccountManagementUrl: String? = null,
3939
var authenticationIssuer: String? = null,
4040
var disableNetworkConstraint: Boolean? = null,
41+
var canUseAuthenticatedMedia: Boolean = false,
4142
) : RealmObject() {
4243

4344
companion object

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetHomeServerCapabilitiesTask.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
2323
import org.matrix.android.sdk.api.extensions.orTrue
2424
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities
2525
import org.matrix.android.sdk.internal.auth.version.Versions
26+
import org.matrix.android.sdk.internal.auth.version.doesServerSupportAuthenticatedMedia
2627
import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices
2728
import org.matrix.android.sdk.internal.auth.version.doesServerSupportQrCodeLogin
2829
import org.matrix.android.sdk.internal.auth.version.doesServerSupportRedactionOfRelatedEvents
@@ -155,6 +156,8 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor(
155156
getVersionResult.doesServerSupportRemoteToggleOfPushNotifications()
156157
homeServerCapabilitiesEntity.canRedactEventWithRelations =
157158
getVersionResult.doesServerSupportRedactionOfRelatedEvents()
159+
homeServerCapabilitiesEntity.canUseAuthenticatedMedia =
160+
getVersionResult.doesServerSupportAuthenticatedMedia()
158161
}
159162

160163
if (getWellknownResult != null && getWellknownResult is WellknownResult.Prompt) {

0 commit comments

Comments
 (0)