From 4ac9d05036dc49b01cde7ed8eebfb90066d83b9d Mon Sep 17 00:00:00 2001 From: David Perez Date: Wed, 17 Apr 2024 16:58:57 -0500 Subject: [PATCH] BIT-2256: Clear pending admin request when request is completed (#1284) --- .../auth/manager/AuthRequestManagerImpl.kt | 13 +++++++++++++ .../auth/manager/AuthRequestManagerTest.kt | 18 +++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt index 86af656e7..732a63e14 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerImpl.kt @@ -35,6 +35,7 @@ private const val PASSWORDLESS_APPROVER_INTERVAL_MILLIS: Long = 5L * 60L * 1_000 /** * Default implementation of [AuthRequestManager]. */ +@Suppress("TooManyFunctions") @Singleton class AuthRequestManagerImpl( private val clock: Clock, @@ -106,6 +107,7 @@ class AuthRequestManagerImpl( onSuccess = { updateAuthRequest -> when { updateAuthRequest.requestApproved -> { + clearPendingAuthRequest() isComplete = true emit( CreateAuthRequestResult.Success( @@ -117,6 +119,7 @@ class AuthRequestManagerImpl( !updateAuthRequest.requestApproved && updateAuthRequest.responseDate != null -> { + clearPendingAuthRequest() isComplete = true emit(CreateAuthRequestResult.Declined) } @@ -126,6 +129,7 @@ class AuthRequestManagerImpl( .toInstant() .plusMillis(PASSWORDLESS_NOTIFICATION_TIMEOUT_MILLIS) .isBefore(clock.instant()) -> { + clearPendingAuthRequest() isComplete = true emit(CreateAuthRequestResult.Expired) } @@ -140,6 +144,15 @@ class AuthRequestManagerImpl( } } + private fun clearPendingAuthRequest() { + activeUserId?.let { + authDiskSource.storePendingAuthRequest( + userId = it, + pendingAuthRequest = null, + ) + } + } + private fun getAuthRequest( initialRequest: suspend () -> AuthRequestUpdatesResult, ): Flow = flow { diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt index 0468c3978..3afd85cba 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/manager/AuthRequestManagerTest.kt @@ -300,16 +300,20 @@ class AuthRequestManagerTest { ) .test { assertEquals(CreateAuthRequestResult.Update(authRequest), awaitItem()) + fakeAuthDiskSource.assertPendingAuthRequest( + userId = USER_ID, + pendingAuthRequest = PendingAuthRequestJson( + requestId = authRequestResponseJson.id, + requestPrivateKey = authRequestResponse.privateKey, + ), + ) assertEquals(CreateAuthRequestResult.Expired, awaitItem()) + fakeAuthDiskSource.assertPendingAuthRequest( + userId = USER_ID, + pendingAuthRequest = null, + ) awaitComplete() } - fakeAuthDiskSource.assertPendingAuthRequest( - userId = USER_ID, - pendingAuthRequest = PendingAuthRequestJson( - requestId = authRequestResponseJson.id, - requestPrivateKey = authRequestResponse.privateKey, - ), - ) } @Suppress("MaxLineLength")