Reset backup id on zk verification failure during restore attempts.

This commit is contained in:
Cody Henthorne
2025-10-08 13:49:53 -04:00
committed by Alex Hart
parent 6e8f982e7b
commit a5cca5b0fd
13 changed files with 249 additions and 86 deletions

View File

@@ -56,7 +56,23 @@ class RemoteRestoreViewModel(isOnlyRestoreOption: Boolean) : ViewModel() {
fun reload() {
viewModelScope.launch(Dispatchers.IO) {
store.update { it.copy(loadState = ScreenState.LoadState.LOADING, loadAttempts = it.loadAttempts + 1) }
val result = BackupRepository.restoreBackupFileTimestamp()
Log.i(TAG, "Fetching remote backup information")
var result: RestoreTimestampResult = BackupRepository.restoreBackupFileTimestamp()
if (result is RestoreTimestampResult.VerificationFailure && SignalStore.account.restoredAccountEntropyPool) {
Log.w(TAG, "Resetting backup id reservation due to zk verification failure with restored AEP")
result = when (val triggerResult = BackupRepository.triggerBackupIdReservationForRestore()) {
is NetworkResult.Success -> {
Log.i(TAG, "Reset successful, trying to restore timestamp")
BackupRepository.restoreBackupFileTimestamp()
}
else -> {
Log.w(TAG, "Reset unsuccessful, failing", triggerResult.getCause())
result
}
}
}
store.update {
when (result) {
is RestoreTimestampResult.Success -> {
@@ -68,6 +84,7 @@ class RemoteRestoreViewModel(isOnlyRestoreOption: Boolean) : ViewModel() {
)
}
is RestoreTimestampResult.BackupsNotEnabled,
is RestoreTimestampResult.NotFound -> {
it.copy(loadState = ScreenState.LoadState.NOT_FOUND)
}

View File

@@ -165,6 +165,7 @@ class RestoreViaQrViewModel : ViewModel() {
SignalStore.backup.lastBackupTime = result.message.backupTimestampMs ?: 0
SignalStore.backup.isBackupTimestampRestored = true
SignalStore.backup.restoringViaQr = true
SignalStore.backup.backupTier = when (result.message.tier) {
RegistrationProvisionMessage.Tier.FREE -> MessageBackupTier.FREE
RegistrationProvisionMessage.Tier.PAID -> MessageBackupTier.PAID