diff --git a/CHANGES.md b/CHANGES.md index 550d013ba3..1c35e70cd8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -43,6 +43,7 @@ Bugfix 🐛: - RiotX now uses as many threads as it needs to do work and send messages (#1221) - Fix issue with media path (#1227) - Add user to direct chat by user id (#1065) + - Use correct URL for SSO connection (#1178) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/Constants.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/Constants.kt new file mode 100644 index 0000000000..af6e2277f4 --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/auth/Constants.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 New Vector Ltd + * + * 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 im.vector.matrix.android.api.auth + +/** + * Path to use when the client does not supported any or all login flows + * Ref: https://matrix.org/docs/spec/client_server/latest#login-fallback + * */ +const val LOGIN_FALLBACK_PATH = "/_matrix/static/client/login/" + +/** + * Path to use when the client does not supported any or all registration flows + * Not documented + */ +const val REGISTER_FALLBACK_PATH = "/_matrix/static/client/register/" + +/** + * Path to use when the client want to connect using SSO + * Ref: https://matrix.org/docs/spec/client_server/latest#sso-client-login + */ +const val SSO_FALLBACK_PATH = "/_matrix/client/r0/login/sso/redirect" + +const val SSO_REDIRECT_URL_PARAM = "redirectUrl" diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginWebFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginWebFragment.kt index 08d92760b2..f9b0b98f29 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginWebFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginWebFragment.kt @@ -31,9 +31,14 @@ import android.webkit.WebView import android.webkit.WebViewClient import androidx.appcompat.app.AlertDialog import com.airbnb.mvrx.activityViewModel +import im.vector.matrix.android.api.auth.LOGIN_FALLBACK_PATH +import im.vector.matrix.android.api.auth.REGISTER_FALLBACK_PATH +import im.vector.matrix.android.api.auth.SSO_FALLBACK_PATH +import im.vector.matrix.android.api.auth.SSO_REDIRECT_URL_PARAM import im.vector.matrix.android.api.auth.data.Credentials import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.riotx.R +import im.vector.riotx.core.extensions.appendParamToUrl import im.vector.riotx.core.utils.AssetReader import im.vector.riotx.features.signout.soft.SoftLogoutAction import im.vector.riotx.features.signout.soft.SoftLogoutViewModel @@ -123,14 +128,24 @@ class LoginWebFragment @Inject constructor( val url = buildString { append(state.homeServerUrl?.trim { it == '/' }) if (state.signMode == SignMode.SignIn) { - append("/_matrix/static/client/login/") + if (state.loginMode == LoginMode.Sso) { + append(SSO_FALLBACK_PATH) + // We do not want to deal with the result, so let the fallback login page to handle it for us + appendParamToUrl(SSO_REDIRECT_URL_PARAM, + buildString { + append(state.homeServerUrl?.trim { it == '/' }) + append(LOGIN_FALLBACK_PATH) + }) + } else { + append(LOGIN_FALLBACK_PATH) + } state.deviceId?.takeIf { it.isNotBlank() }?.let { // But https://github.com/matrix-org/synapse/issues/5755 - append("?device_id=$it") + appendParamToUrl("device_id", it) } } else { // MODE_REGISTER - append("/_matrix/static/client/register/") + append(REGISTER_FALLBACK_PATH) } }