From ea61942cccf0e9b049b8bc4069fc13ab9076516d Mon Sep 17 00:00:00 2001 From: mxandreas Date: Thu, 16 Jul 2026 07:58:22 +0100 Subject: [PATCH 1/4] Do not enforce MDM-configured homeserver to login via QR-code. --- .../login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 2f93d5b214..699ea68852 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -97,13 +97,6 @@ class QrCodeScanPresenter( val data = qrCodeLoginDataFactory.parseQrCodeData(code).onFailure { Timber.e(it, "Error parsing QR code data") }.getOrThrow() - val serverName = data.serverName() - if (serverName != null) { - defaultAccountProviderAccessControl.assertIsAllowedToConnectToAccountProvider( - title = serverName, - accountProviderUrl = serverName, - ) - } data }.runCatchingUpdatingState(codeScannedAction) }.invokeOnCompletion { From 67cb11f6d0650a45e94437be9a521088b7e99dd8 Mon Sep 17 00:00:00 2001 From: mxandreas Date: Thu, 16 Jul 2026 08:25:47 +0100 Subject: [PATCH 2/4] Fix tests and remove unused code. --- .../qrcode/scan/QrCodeScanPresenter.kt | 1 - .../qrcode/scan/QrCodeScanPresenterTest.kt | 38 ------------------- 2 files changed, 39 deletions(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 699ea68852..904d591738 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -39,7 +39,6 @@ class QrCodeScanPresenter( private val qrCodeLoginDataFactory: MatrixQrCodeLoginDataFactory, private val qrCodeLoginManager: QrCodeLoginManager, private val coroutineDispatchers: CoroutineDispatchers, - private val defaultAccountProviderAccessControl: DefaultAccountProviderAccessControl, ) : Presenter { private var isScanning by mutableStateOf(true) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt index 65a0713f64..07baa22484 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt @@ -66,44 +66,6 @@ class QrCodeScanPresenterTest { } } - @Test - fun `present - scanned QR code successfully, but homeserver not allowed`() = runTest { - val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory( - parseQrCodeLoginDataResult = { - Result.success( - FakeMatrixQrCodeLoginData( - serverNameResult = { "example.com" } - ) - ) - } - ) - val presenter = createQrCodeScanPresenter( - qrCodeLoginDataFactory = qrCodeLoginDataFactory, - enterpriseService = FakeEnterpriseService( - isAllowedToConnectToHomeserverResult = { false }, - defaultHomeserverListResult = { listOf("element.io") }, - ) - ) - presenter.test { - val initialState = awaitItem() - initialState.eventSink(QrCodeScanEvents.QrCodeScanned(byteArrayOf())) - assertThat(awaitItem().isScanning).isFalse() - assertThat(awaitItem().authenticationAction.isLoading()).isTrue() - awaitItem().also { state -> - assertThat( - (state.authenticationAction - .errorOrNull() as AccountProviderAccessException.UnauthorizedAccountProviderException).unauthorisedAccountProviderTitle - ) - .isEqualTo("example.com") - assertThat( - (state.authenticationAction - .errorOrNull() as AccountProviderAccessException.UnauthorizedAccountProviderException).authorisedAccountProviderTitles - ) - .containsExactly("element.io") - } - } - } - @Test fun `present - scanned QR code failed and can be retried`() = runTest { val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory( From 16bfca1e16533e0ca897eef70ddf03e12d457250 Mon Sep 17 00:00:00 2001 From: mxandreas Date: Thu, 16 Jul 2026 08:34:07 +0100 Subject: [PATCH 3/4] Remove unused code. --- .../login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt | 1 - .../login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 904d591738..5e298604a4 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import dev.zacsweers.metro.Inject -import io.element.android.features.login.impl.accesscontrol.DefaultAccountProviderAccessControl import io.element.android.features.login.impl.qrcode.QrCodeLoginManager import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt index 07baa22484..b0b83f8c24 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt @@ -12,7 +12,6 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.login.impl.accesscontrol.DefaultAccountProviderAccessControl -import io.element.android.features.login.impl.changeserver.AccountProviderAccessException import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager import io.element.android.features.wellknown.test.FakeWellknownRetriever import io.element.android.libraries.core.coroutine.CoroutineDispatchers From 3854caa8f121bbbce05a4135beedf1a0a3a0e0d2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 16 Jul 2026 10:27:20 +0200 Subject: [PATCH 4/4] Fix test compilation issue. --- .../screens/qrcode/scan/QrCodeScanPresenterTest.kt | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt index b0b83f8c24..d4f23a452c 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt @@ -9,17 +9,12 @@ package io.element.android.features.login.impl.screens.qrcode.scan import com.google.common.truth.Truth.assertThat -import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.features.enterprise.test.FakeEnterpriseService -import io.element.android.features.login.impl.accesscontrol.DefaultAccountProviderAccessControl import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager -import io.element.android.features.wellknown.test.FakeWellknownRetriever import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginData import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginDataFactory -import io.element.android.libraries.wellknown.api.WellknownRetriever import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.test import io.element.android.tests.testutils.testCoroutineDispatchers @@ -52,9 +47,6 @@ class QrCodeScanPresenterTest { ) val presenter = createQrCodeScanPresenter( qrCodeLoginDataFactory = qrCodeLoginDataFactory, - enterpriseService = FakeEnterpriseService( - isAllowedToConnectToHomeserverResult = { true }, - ) ) presenter.test { val initialState = awaitItem() @@ -114,15 +106,9 @@ class QrCodeScanPresenterTest { qrCodeLoginDataFactory: FakeMatrixQrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(), coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(), qrCodeLoginManager: FakeQrCodeLoginManager = FakeQrCodeLoginManager(), - enterpriseService: EnterpriseService = FakeEnterpriseService(), - wellknownRetriever: WellknownRetriever = FakeWellknownRetriever(), ) = QrCodeScanPresenter( qrCodeLoginDataFactory = qrCodeLoginDataFactory, qrCodeLoginManager = qrCodeLoginManager, coroutineDispatchers = coroutineDispatchers, - defaultAccountProviderAccessControl = DefaultAccountProviderAccessControl( - enterpriseService = enterpriseService, - wellknownRetriever = wellknownRetriever, - ), ) }