From 04bf2cd0c2f9122e7a7e02bbd7612953d8de061a Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 8 Dec 2022 09:47:39 -0500 Subject: [PATCH] Ignore decomissioned KBS enclaves when encountered during getToken. --- .../securesms/pin/KbsRepository.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java index d85b6efe47..1ac2bcb20f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java @@ -14,6 +14,7 @@ import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.KeyBackupServicePinException; import org.whispersystems.signalservice.api.KeyBackupSystemNoDataException; import org.whispersystems.signalservice.api.kbs.HashedPin; +import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.internal.ServiceResponse; import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse; @@ -64,11 +65,21 @@ public class KbsRepository { for (KbsEnclave enclave : KbsEnclaves.all()) { KeyBackupService kbs = ApplicationDependencies.getKeyBackupService(enclave); + TokenResponse token; - authorization = authorization == null ? kbs.getAuthorization() : authorization; + try { + authorization = authorization == null ? kbs.getAuthorization() : authorization; + token = kbs.getToken(authorization); + } catch (NonSuccessfulResponseCodeException e) { + if (e.getCode() == 404) { + Log.i(TAG, "Enclave decommissioned, skipping", e); + continue; + } else { + throw e; + } + } - TokenResponse token = kbs.getToken(authorization); - TokenData tokenData = new TokenData(enclave, authorization, token); + TokenData tokenData = new TokenData(enclave, authorization, token); if (tokenData.getTriesRemaining() > 0) { Log.i(TAG, "Found data! " + enclave.getEnclaveName());