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());