mirror of
https://github.com/bitwarden/android.git
synced 2025-12-10 09:56:45 -06:00
PM-25431: Allow SYNC_SEND_DELETE notification to delete sends for inactive user (#5827)
This commit is contained in:
parent
58db64da1a
commit
eec4233486
@ -27,6 +27,7 @@ import kotlinx.coroutines.flow.mapNotNull
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.serialization.json.Json
|
||||
import timber.log.Timber
|
||||
import java.time.Clock
|
||||
import java.time.ZoneOffset
|
||||
import java.time.ZonedDateTime
|
||||
@ -129,8 +130,8 @@ class PushManagerImpl @Inject constructor(
|
||||
@Suppress("LongMethod", "CyclomaticComplexMethod")
|
||||
private fun onMessageReceived(notification: BitwardenNotification) {
|
||||
if (authDiskSource.uniqueAppId == notification.contextId) return
|
||||
|
||||
val userId = activeUserId ?: return
|
||||
Timber.d("Push Notification Received: ${notification.notificationType}")
|
||||
|
||||
when (val type = notification.notificationType) {
|
||||
NotificationType.AUTH_REQUEST,
|
||||
@ -266,9 +267,14 @@ class PushManagerImpl @Inject constructor(
|
||||
.decodeFromString<NotificationPayload.SyncSendNotification>(
|
||||
string = notification.payload,
|
||||
)
|
||||
.takeIf { isLoggedIn(userId) && it.userMatchesNotification(userId) }
|
||||
?.sendId
|
||||
?.let { mutableSyncSendDeleteSharedFlow.tryEmit(SyncSendDeleteData(it)) }
|
||||
.takeIf { it.userId != null && it.sendId != null }
|
||||
?.let {
|
||||
SyncSendDeleteData(
|
||||
userId = requireNotNull(it.userId),
|
||||
sendId = requireNotNull(it.sendId),
|
||||
)
|
||||
}
|
||||
?.let { mutableSyncSendDeleteSharedFlow.tryEmit(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,9 +2,8 @@ package com.x8bit.bitwarden.data.platform.manager.model
|
||||
|
||||
/**
|
||||
* Required data for sync send delete operations.
|
||||
*
|
||||
* @property sendId The send ID.
|
||||
*/
|
||||
data class SyncSendDeleteData(
|
||||
val userId: String,
|
||||
val sendId: String,
|
||||
)
|
||||
|
||||
@ -1385,12 +1385,9 @@ class VaultRepositoryImpl(
|
||||
* Deletes the send specified by [syncSendDeleteData] from disk.
|
||||
*/
|
||||
private suspend fun deleteSend(syncSendDeleteData: SyncSendDeleteData) {
|
||||
val userId = activeUserId ?: return
|
||||
|
||||
val sendId = syncSendDeleteData.sendId
|
||||
vaultDiskSource.deleteSend(
|
||||
userId = userId,
|
||||
sendId = sendId,
|
||||
userId = syncSendDeleteData.userId,
|
||||
sendId = syncSendDeleteData.sendId,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@ -343,6 +343,7 @@ class PushManagerTest {
|
||||
pushManager.onMessageReceived(SYNC_SEND_DELETE_NOTIFICATION_MAP)
|
||||
assertEquals(
|
||||
SyncSendDeleteData(
|
||||
userId = "078966a2-93c2-4618-ae2a-0a2394c88d37",
|
||||
sendId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321",
|
||||
),
|
||||
awaitItem(),
|
||||
@ -456,10 +457,16 @@ class PushManagerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `onMessageReceived with sync send delete does nothing`() = runTest {
|
||||
fun `onMessageReceived with sync send delete emits to syncSendDeleteFlow`() = runTest {
|
||||
pushManager.syncSendDeleteFlow.test {
|
||||
pushManager.onMessageReceived(SYNC_SEND_DELETE_NOTIFICATION_MAP)
|
||||
expectNoEvents()
|
||||
assertEquals(
|
||||
SyncSendDeleteData(
|
||||
userId = "078966a2-93c2-4618-ae2a-0a2394c88d37",
|
||||
sendId = "aab5cdcc-f4a7-4e65-bf6d-5e0eab052321",
|
||||
),
|
||||
awaitItem(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3679,13 +3679,9 @@ class VaultRepositoryTest {
|
||||
fun `syncSendDeleteFlow should delete send from disk`() {
|
||||
val userId = "mockId-1"
|
||||
val sendId = "mockId-1"
|
||||
|
||||
fakeAuthDiskSource.userState = MOCK_USER_STATE
|
||||
coEvery { vaultDiskSource.deleteSend(userId = userId, sendId = sendId) } just runs
|
||||
|
||||
mutableSyncSendDeleteFlow.tryEmit(
|
||||
SyncSendDeleteData(sendId = sendId),
|
||||
)
|
||||
mutableSyncSendDeleteFlow.tryEmit(SyncSendDeleteData(userId = userId, sendId = sendId))
|
||||
|
||||
coVerify { vaultDiskSource.deleteSend(userId = userId, sendId = sendId) }
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user