Handle less generic exceptions in catch clauses
This commit is contained in:
parent
d82bcaa3e8
commit
210d0fa7f4
@ -116,11 +116,10 @@ class VaultConfig private constructor(builder: VaultConfigBuilder) {
|
||||
.shorteningThreshold(parser.body[JSON_KEY_SHORTENING_THRESHOLD] as Int)
|
||||
|
||||
VaultConfig(vaultConfigBuilder)
|
||||
} catch (e: Exception) {
|
||||
} catch (e: JwtException) {
|
||||
when (e) {
|
||||
is MissingClaimException, is IncorrectClaimException -> throw VaultVersionMismatchException("Vault config not for version " + unverifiedVaultConfig.vaultFormat)
|
||||
is SignatureException -> throw VaultKeyInvalidException()
|
||||
is JwtException -> throw VaultConfigLoadException("Failed to verify vault config", e)
|
||||
else -> throw VaultConfigLoadException(e)
|
||||
}
|
||||
}
|
||||
|
@ -110,9 +110,9 @@ internal class OnedriveCloudContentRepository(private val cloud: OnedriveCloud,
|
||||
}
|
||||
|
||||
@Throws(BackendException::class)
|
||||
override fun read(file: OnedriveFile, tmpEncryptedFile: File?, data: OutputStream, progressAware: ProgressAware<DownloadState>) {
|
||||
override fun read(file: OnedriveFile, encryptedTmpFile: File?, data: OutputStream, progressAware: ProgressAware<DownloadState>) {
|
||||
try {
|
||||
oneDriveImpl.read(file, tmpEncryptedFile, data, progressAware)
|
||||
oneDriveImpl.read(file, encryptedTmpFile, data, progressAware)
|
||||
} catch (e: IOException) {
|
||||
when {
|
||||
ExceptionUtil.contains(e, NoSuchCloudFileException::class.java) -> {
|
||||
|
@ -144,7 +144,7 @@ public class UpdateCheckRepositoryImpl implements UpdateCheckRepository {
|
||||
}
|
||||
}
|
||||
return new String(Hex.encodeHex(digest.digest()));
|
||||
} catch (Exception e) {
|
||||
} catch (NoSuchAlgorithmException | IOException e) {
|
||||
throw new GeneralUpdateErrorException(e);
|
||||
}
|
||||
}
|
||||
@ -272,7 +272,7 @@ public class UpdateCheckRepositoryImpl implements UpdateCheckRepository {
|
||||
urlApk = jws.get("url", String.class);
|
||||
apkSha256 = jws.get("apk_sha_256", String.class);
|
||||
urlReleaseNote = jws.get("release_notes", String.class);
|
||||
} catch (Exception e) {
|
||||
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
|
||||
throw new GeneralUpdateErrorException("Failed to parse latest version", e);
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import org.cryptomator.presentation.R
|
||||
import org.cryptomator.presentation.model.S3CloudModel
|
||||
import org.cryptomator.presentation.presenter.S3AddOrChangePresenter
|
||||
import org.cryptomator.util.crypto.CredentialCryptor
|
||||
import org.cryptomator.util.crypto.FatalCryptoException
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.fragment_setup_s3.accessKeyEditText
|
||||
import kotlinx.android.synthetic.main.fragment_setup_s3.bucketEditText
|
||||
@ -58,7 +59,7 @@ class S3AddOrChangeFragment : BaseFragment() {
|
||||
CredentialCryptor //
|
||||
.getInstance(activity?.applicationContext) //
|
||||
.decrypt(text)
|
||||
} catch (e: RuntimeException) {
|
||||
} catch (e: FatalCryptoException) {
|
||||
Timber.tag("S3AddOrChangeFragment").e(e, "Unable to decrypt password, clearing it")
|
||||
""
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import org.cryptomator.presentation.R
|
||||
import org.cryptomator.presentation.model.WebDavCloudModel
|
||||
import org.cryptomator.presentation.presenter.WebDavAddOrChangePresenter
|
||||
import org.cryptomator.util.crypto.CredentialCryptor
|
||||
import org.cryptomator.util.crypto.FatalCryptoException
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.fragment_setup_webdav.createCloudButton
|
||||
import kotlinx.android.synthetic.main.fragment_setup_webdav.passwordEditText
|
||||
@ -55,7 +56,7 @@ class WebDavAddOrChangeFragment : BaseFragment() {
|
||||
CredentialCryptor //
|
||||
.getInstance(activity?.applicationContext) //
|
||||
.decrypt(password)
|
||||
} catch (e: RuntimeException) {
|
||||
} catch (e: FatalCryptoException) {
|
||||
Timber.tag("WebdavAddOrCangeFragmnt").e(e, "Unable to decrypt password, clearing it")
|
||||
""
|
||||
}
|
||||
|
@ -208,24 +208,20 @@ class FileUtil @Inject constructor(private val context: Context, private val mim
|
||||
*/
|
||||
private fun tryRecoverAutoUploadFilesStoreDueToFileObfuscation(file: File): AutoUploadFilesStore {
|
||||
Timber.tag("FileUtil").i("Try to recover AutoUploadFilesStore using class c or a")
|
||||
try {
|
||||
ObjectInputStream(FileInputStream(file)).use { objectInputStream ->
|
||||
val uploadPaths = when (val obj = objectInputStream.readObject()) {
|
||||
is org.cryptomator.presentation.e.c -> obj.mE() // version 1.5.10
|
||||
is org.cryptomator.presentation.i.a -> obj.b() // version 1.5.11-beta1
|
||||
else -> null
|
||||
}
|
||||
when {
|
||||
uploadPaths != null -> {
|
||||
Timber.tag("FileUtil").i("Nailed it! Successfully recovered AutoUploadFilesStore!")
|
||||
file.delete()
|
||||
return AutoUploadFilesStore(uploadPaths)
|
||||
}
|
||||
else -> throw FatalBackendException("Failed to recover AutoUploadFilesStore")
|
||||
}
|
||||
ObjectInputStream(FileInputStream(file)).use { objectInputStream ->
|
||||
val uploadPaths = when (val obj = objectInputStream.readObject()) {
|
||||
is org.cryptomator.presentation.e.c -> obj.mE() // version 1.5.10
|
||||
is org.cryptomator.presentation.i.a -> obj.b() // version 1.5.11-beta1
|
||||
else -> null
|
||||
}
|
||||
when {
|
||||
uploadPaths != null -> {
|
||||
Timber.tag("FileUtil").i("Nailed it! Successfully recovered AutoUploadFilesStore!")
|
||||
file.delete()
|
||||
return AutoUploadFilesStore(uploadPaths)
|
||||
}
|
||||
else -> throw FatalBackendException("Failed to recover AutoUploadFilesStore")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
throw FatalBackendException("Failed to recover AutoUploadFilesStore", e)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,8 @@ package org.cryptomator.util.crypto;
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.InvalidKeyException;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
|
||||
@ -22,20 +24,14 @@ class CipherImpl implements Cipher {
|
||||
|
||||
private static byte[] mergeIvAndEncryptedData(byte[] encrypted, byte[] iv) {
|
||||
byte[] mergedIvAndEncrypted = new byte[encrypted.length + iv.length];
|
||||
arraycopy( //
|
||||
iv, 0, //
|
||||
mergedIvAndEncrypted, 0, IV_LENGTH);
|
||||
arraycopy( //
|
||||
encrypted, 0, //
|
||||
mergedIvAndEncrypted, IV_LENGTH, encrypted.length);
|
||||
arraycopy(iv, 0, mergedIvAndEncrypted, 0, IV_LENGTH);
|
||||
arraycopy(encrypted, 0, mergedIvAndEncrypted, IV_LENGTH, encrypted.length);
|
||||
return mergedIvAndEncrypted;
|
||||
}
|
||||
|
||||
static byte[] getBytes(byte[] encryptedBytesWithIv) {
|
||||
byte[] bytes = new byte[encryptedBytesWithIv.length - IV_LENGTH];
|
||||
arraycopy( //
|
||||
encryptedBytesWithIv, IV_LENGTH, //
|
||||
bytes, 0, bytes.length);
|
||||
arraycopy(encryptedBytesWithIv, IV_LENGTH, bytes, 0, bytes.length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
@ -45,8 +41,8 @@ class CipherImpl implements Cipher {
|
||||
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
|
||||
byte[] encrypted = cipher.doFinal(data);
|
||||
return mergeIvAndEncryptedData(encrypted, cipher.getIV());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
|
||||
throw new FatalCryptoException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,8 +54,8 @@ class CipherImpl implements Cipher {
|
||||
IvParameterSpec ivspec = new IvParameterSpec(iv);
|
||||
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key, ivspec);
|
||||
return cipher.doFinal(bytes);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (InvalidKeyException | BadPaddingException | IllegalBlockSizeException | InvalidAlgorithmParameterException e) {
|
||||
throw new FatalCryptoException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,9 +75,7 @@ class CipherImpl implements Cipher {
|
||||
|
||||
private byte[] getIv(byte[] encryptedBytesWithIv) {
|
||||
byte[] iv = new byte[IV_LENGTH];
|
||||
arraycopy( //
|
||||
encryptedBytesWithIv, 0, //
|
||||
iv, 0, IV_LENGTH);
|
||||
arraycopy(encryptedBytesWithIv, 0, iv, 0, IV_LENGTH);
|
||||
return iv;
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,12 @@ import android.security.keystore.KeyGenParameterSpec;
|
||||
import android.security.keystore.KeyProperties;
|
||||
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.UnrecoverableKeyException;
|
||||
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
import javax.crypto.SecretKey;
|
||||
|
||||
class CryptoOperationsImpl implements CryptoOperations {
|
||||
@ -22,8 +26,8 @@ class CryptoOperationsImpl implements CryptoOperations {
|
||||
return new CipherImpl(cipher, key);
|
||||
} catch (UnrecoverableKeyException e) {
|
||||
throw new UnrecoverableStorageKeyException(e);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (NoSuchPaddingException | NoSuchAlgorithmException | KeyStoreException e) {
|
||||
throw new FatalCryptoException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,8 +36,8 @@ class CryptoOperationsImpl implements CryptoOperations {
|
||||
final javax.crypto.KeyGenerator generator;
|
||||
try {
|
||||
generator = javax.crypto.KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, KeyStoreBuilder.DEFAULT_KEYSTORE_NAME);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
|
||||
throw new FatalCryptoException(e);
|
||||
}
|
||||
return requireUserAuthentication -> {
|
||||
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec //
|
||||
|
@ -0,0 +1,10 @@
|
||||
package org.cryptomator.util.crypto;
|
||||
|
||||
import java.security.GeneralSecurityException;
|
||||
|
||||
public class FatalCryptoException extends RuntimeException {
|
||||
|
||||
public FatalCryptoException(GeneralSecurityException e) {
|
||||
super(e);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user