From 12395e9b04c24f92583c101774d8e60cd9d1894f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Aug 2023 11:40:47 +0200 Subject: [PATCH] OIDC redirect to the web page to delete a session (legacy session manager) #8616 --- .../features/settings/devices/DevicesViewEvents.kt | 2 ++ .../features/settings/devices/DevicesViewModel.kt | 14 ++++++++++++++ .../devices/VectorSettingsDevicesFragment.kt | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewEvents.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewEvents.kt index c97f353110..de9671e360 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewEvents.kt @@ -50,4 +50,6 @@ sealed class DevicesViewEvents : VectorViewEvents { data class ShowManuallyVerify(val cryptoDeviceInfo: CryptoDeviceInfo) : DevicesViewEvents() object PromptResetSecrets : DevicesViewEvents() + + data class OpenBrowser(val url: String) : DevicesViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt index 526a6006e1..5a1e602808 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/DevicesViewModel.kt @@ -346,6 +346,20 @@ class DevicesViewModel @AssistedInject constructor( private fun handleDelete(action: DevicesAction.Delete) { val deviceId = action.deviceId + val accountManagementUrl = session.homeServerCapabilitiesService().getHomeServerCapabilities().externalAccountManagementUrl + if (accountManagementUrl != null) { + // Open external browser to delete this session + _viewEvents.post( + DevicesViewEvents.OpenBrowser( + url = accountManagementUrl.removeSuffix("/") + "?action=session_end&device_id=$deviceId" + ) + ) + } else { + doDelete(deviceId) + } + } + + private fun doDelete(deviceId: String) { setState { copy( request = Loading() diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt index 5e2f0b21f2..9cb314b2b7 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt @@ -35,6 +35,7 @@ import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment +import im.vector.app.core.utils.openUrlInChromeCustomTab import im.vector.app.databinding.DialogBaseEditTextBinding import im.vector.app.databinding.FragmentGenericRecyclerBinding import im.vector.app.features.auth.ReAuthActivity @@ -95,6 +96,9 @@ class VectorSettingsDevicesFragment : is DevicesViewEvents.PromptResetSecrets -> { navigator.open4SSetup(requireActivity(), SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET) } + is DevicesViewEvents.OpenBrowser -> { + openUrlInChromeCustomTab(requireContext(), null, it.url) + } } } }