mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 10:32:34 +00:00
Merge pull request #7228 from element-hq/mxandreas/no-hs-check-qr
Fix logging via QR code when using MDM-configured homeserver
This commit is contained in:
-9
@@ -17,7 +17,6 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import dev.zacsweers.metro.Inject
|
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.features.login.impl.qrcode.QrCodeLoginManager
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
@@ -39,7 +38,6 @@ class QrCodeScanPresenter(
|
|||||||
private val qrCodeLoginDataFactory: MatrixQrCodeLoginDataFactory,
|
private val qrCodeLoginDataFactory: MatrixQrCodeLoginDataFactory,
|
||||||
private val qrCodeLoginManager: QrCodeLoginManager,
|
private val qrCodeLoginManager: QrCodeLoginManager,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
private val coroutineDispatchers: CoroutineDispatchers,
|
||||||
private val defaultAccountProviderAccessControl: DefaultAccountProviderAccessControl,
|
|
||||||
) : Presenter<QrCodeScanState> {
|
) : Presenter<QrCodeScanState> {
|
||||||
private var isScanning by mutableStateOf(true)
|
private var isScanning by mutableStateOf(true)
|
||||||
|
|
||||||
@@ -97,13 +95,6 @@ class QrCodeScanPresenter(
|
|||||||
val data = qrCodeLoginDataFactory.parseQrCodeData(code).onFailure {
|
val data = qrCodeLoginDataFactory.parseQrCodeData(code).onFailure {
|
||||||
Timber.e(it, "Error parsing QR code data")
|
Timber.e(it, "Error parsing QR code data")
|
||||||
}.getOrThrow()
|
}.getOrThrow()
|
||||||
val serverName = data.serverName()
|
|
||||||
if (serverName != null) {
|
|
||||||
defaultAccountProviderAccessControl.assertIsAllowedToConnectToAccountProvider(
|
|
||||||
title = serverName,
|
|
||||||
accountProviderUrl = serverName,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
data
|
data
|
||||||
}.runCatchingUpdatingState(codeScannedAction)
|
}.runCatchingUpdatingState(codeScannedAction)
|
||||||
}.invokeOnCompletion {
|
}.invokeOnCompletion {
|
||||||
|
|||||||
-53
@@ -9,18 +9,12 @@
|
|||||||
package io.element.android.features.login.impl.screens.qrcode.scan
|
package io.element.android.features.login.impl.screens.qrcode.scan
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
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.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.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep
|
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.api.auth.qrlogin.QrLoginException
|
||||||
import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginData
|
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.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.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.test
|
import io.element.android.tests.testutils.test
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
@@ -53,9 +47,6 @@ class QrCodeScanPresenterTest {
|
|||||||
)
|
)
|
||||||
val presenter = createQrCodeScanPresenter(
|
val presenter = createQrCodeScanPresenter(
|
||||||
qrCodeLoginDataFactory = qrCodeLoginDataFactory,
|
qrCodeLoginDataFactory = qrCodeLoginDataFactory,
|
||||||
enterpriseService = FakeEnterpriseService(
|
|
||||||
isAllowedToConnectToHomeserverResult = { true },
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
@@ -66,44 +57,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
|
@Test
|
||||||
fun `present - scanned QR code failed and can be retried`() = runTest {
|
fun `present - scanned QR code failed and can be retried`() = runTest {
|
||||||
val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(
|
val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(
|
||||||
@@ -153,15 +106,9 @@ class QrCodeScanPresenterTest {
|
|||||||
qrCodeLoginDataFactory: FakeMatrixQrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(),
|
qrCodeLoginDataFactory: FakeMatrixQrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(),
|
||||||
coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(),
|
coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(),
|
||||||
qrCodeLoginManager: FakeQrCodeLoginManager = FakeQrCodeLoginManager(),
|
qrCodeLoginManager: FakeQrCodeLoginManager = FakeQrCodeLoginManager(),
|
||||||
enterpriseService: EnterpriseService = FakeEnterpriseService(),
|
|
||||||
wellknownRetriever: WellknownRetriever = FakeWellknownRetriever(),
|
|
||||||
) = QrCodeScanPresenter(
|
) = QrCodeScanPresenter(
|
||||||
qrCodeLoginDataFactory = qrCodeLoginDataFactory,
|
qrCodeLoginDataFactory = qrCodeLoginDataFactory,
|
||||||
qrCodeLoginManager = qrCodeLoginManager,
|
qrCodeLoginManager = qrCodeLoginManager,
|
||||||
coroutineDispatchers = coroutineDispatchers,
|
coroutineDispatchers = coroutineDispatchers,
|
||||||
defaultAccountProviderAccessControl = DefaultAccountProviderAccessControl(
|
|
||||||
enterpriseService = enterpriseService,
|
|
||||||
wellknownRetriever = wellknownRetriever,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user