diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt index bcb8e9e25a..cc9a22332c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt @@ -34,6 +34,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult import com.x8bit.bitwarden.data.auth.repository.model.VerifiedOrganizationDomainSsoDetailsResult import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult +import com.x8bit.bitwarden.data.auth.repository.util.CookieCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.DuoCallbackTokenResult import com.x8bit.bitwarden.data.auth.repository.util.SsoCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.WebAuthResult @@ -70,6 +71,12 @@ interface AuthRepository : */ val ssoCallbackResultFlow: Flow + /** + * Flow of the current [CookieCallbackResult]. Subscribers should listen to the flow in order + * to receive updates whenever [setCookieCallbackResult] is called. + */ + val cookieCallbackResultFlow: Flow + /** * Flow of the current [YubiKeyResult]. Subscribers should listen to the flow in order to * receive updates whenever [setYubiKeyResult] is called. @@ -342,6 +349,11 @@ interface AuthRepository : */ fun setSsoCallbackResult(result: SsoCallbackResult) + /** + * Set the value of [cookieCallbackResultFlow]. + */ + fun setCookieCallbackResult(result: CookieCallbackResult) + /** * Get a [Boolean] indicating whether this is a known device. */ diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt index 4081c6a68c..3307b3afd3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt @@ -95,6 +95,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult import com.x8bit.bitwarden.data.auth.repository.model.VerifiedOrganizationDomainSsoDetailsResult import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult import com.x8bit.bitwarden.data.auth.repository.model.toLoginErrorResult +import com.x8bit.bitwarden.data.auth.repository.util.CookieCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.DuoCallbackTokenResult import com.x8bit.bitwarden.data.auth.repository.util.SsoCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.WebAuthResult @@ -269,6 +270,10 @@ class AuthRepositoryImpl( override val ssoCallbackResultFlow: Flow = mutableSsoCallbackResultFlow.asSharedFlow() + private val mutableCookieCallbackResultFlow = bufferedMutableSharedFlow() + override val cookieCallbackResultFlow: Flow = + mutableCookieCallbackResultFlow.asSharedFlow() + override var rememberedEmailAddress: String? by authDiskSource::rememberedEmailAddress override var rememberedOrgIdentifier: String? by authDiskSource::rememberedOrgIdentifier @@ -1249,6 +1254,10 @@ class AuthRepositoryImpl( mutableSsoCallbackResultFlow.tryEmit(result) } + override fun setCookieCallbackResult(result: CookieCallbackResult) { + mutableCookieCallbackResultFlow.tryEmit(result) + } + override suspend fun getIsKnownDevice(emailAddress: String): KnownDeviceResult = devicesService .getIsKnownDevice( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index e174e0cf71..c789e73150 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -119,6 +119,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.ValidatePinResult import com.x8bit.bitwarden.data.auth.repository.model.VerifiedOrganizationDomainSsoDetailsResult import com.x8bit.bitwarden.data.auth.repository.model.VerifyOtpResult import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization +import com.x8bit.bitwarden.data.auth.repository.util.CookieCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.DuoCallbackTokenResult import com.x8bit.bitwarden.data.auth.repository.util.SsoCallbackResult import com.x8bit.bitwarden.data.auth.repository.util.WebAuthResult @@ -6213,6 +6214,19 @@ class AuthRepositoryTest { } } + @Test + fun `setCookieCallbackResult should change the value of cookieCallbackResultFlow`() = runTest { + repository.cookieCallbackResultFlow.test { + repository.setCookieCallbackResult( + CookieCallbackResult.Success(cookies = mapOf("test_cookie" to "test_value")), + ) + assertEquals( + CookieCallbackResult.Success(cookies = mapOf("test_cookie" to "test_value")), + awaitItem(), + ) + } + } + @Test fun `setYubiKeyResult should change the value of yubiKeyResultFlow`() = runTest { val yubiKeyResult = YubiKeyResult("mockk")