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 1294855b6e..385fdcbf9b 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 @@ -176,10 +176,11 @@ internal class DefaultAuthenticationService @Inject constructor( } } .map { riotConfig -> - if (riotConfig.defaultHomeServerUrl?.isNotBlank() == true) { + val defaultHomeServerUrl = riotConfig.getPreferredHomeServerUrl() + if (defaultHomeServerUrl?.isNotEmpty() == true) { // Ok, good sign, we got a default hs url val newHomeServerConnectionConfig = homeServerConnectionConfig.copy( - homeServerUri = Uri.parse(riotConfig.defaultHomeServerUrl) + homeServerUri = Uri.parse(defaultHomeServerUrl) ) val newAuthAPI = buildAuthAPI(newHomeServerConnectionConfig) @@ -188,7 +189,7 @@ internal class DefaultAuthenticationService @Inject constructor( apiCall = newAuthAPI.versions() } - getLoginFlowResult(newAuthAPI, versions, riotConfig.defaultHomeServerUrl) + getLoginFlowResult(newAuthAPI, versions, defaultHomeServerUrl) } else { // Config exists, but there is no default homeserver url (ex: https://riot.im/app) throw Failure.OtherServerError("", HttpsURLConnection.HTTP_NOT_FOUND /* 404 */) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt index 42db315262..1c1c5c0c29 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt @@ -22,8 +22,30 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) data class RiotConfig( - // There are plenty of other elements in the file config.json of a RiotWeb client, but for the moment only one is interesting - // Ex: "brand", "branding", etc. + /** + * This is now deprecated, but still used first, rather than value from "default_server_config" + */ @Json(name = "default_hs_url") - val defaultHomeServerUrl: String? + val defaultHomeServerUrl: String?, + + @Json(name = "default_server_config") + val defaultServerConfig: RiotConfigDefaultServerConfig? +) { + fun getPreferredHomeServerUrl(): String? { + return defaultHomeServerUrl + ?.takeIf { it.isNotEmpty() } + ?: defaultServerConfig?.homeServer?.baseURL + } +} + +@JsonClass(generateAdapter = true) +data class RiotConfigDefaultServerConfig( + @Json(name = "m.homeserver") + val homeServer: RiotConfigBaseConfig? = null +) + +@JsonClass(generateAdapter = true) +data class RiotConfigBaseConfig( + @Json(name = "base_url") + val baseURL: String? = null )