From df57e01fce9f5b029487bb5eb397a25842213229 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 5 May 2021 14:41:03 +0200 Subject: [PATCH] Throw specific Exception if Masterkey is not at the default location And fix displaying those errors in local storage cloud because the enter password dialog was only partial present when this exception is thrown which leads to a nullpointer. --- .../data/cloud/crypto/MasterkeyCryptoCloudProvider.java | 6 ++++-- .../cryptomator/presentation/exception/ExceptionHandlers.kt | 2 ++ .../presentation/presenter/UnlockVaultPresenter.kt | 2 +- presentation/src/main/res/values/strings.xml | 1 + 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java b/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java index 2ea3cc6d..60806d53 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/MasterkeyCryptoCloudProvider.java @@ -12,6 +12,7 @@ import org.cryptomator.domain.Vault; import org.cryptomator.domain.exception.BackendException; import org.cryptomator.domain.exception.CancellationException; import org.cryptomator.domain.exception.FatalBackendException; +import org.cryptomator.domain.exception.vaultconfig.UnsupportedMasterkeyLocationException; import org.cryptomator.domain.repository.CloudContentRepository; import org.cryptomator.domain.usecases.cloud.ByteArrayDataSource; import org.cryptomator.domain.usecases.cloud.Flag; @@ -161,8 +162,9 @@ public class MasterkeyCryptoCloudProvider implements CryptoCloudProvider { private CloudFile masterkeyFile(CloudFolder vaultLocation, UnverifiedVaultConfig unverifiedVaultConfig) throws BackendException { String path = unverifiedVaultConfig.getKeyId().getSchemeSpecificPart(); - // TODO / FIXME sanitize path and throw specific exception - //throw new UnsupportedMasterkeyLocationException(unverifiedVaultConfig); + if(!path.equals(MASTERKEY_FILE_NAME)) { + throw new UnsupportedMasterkeyLocationException(unverifiedVaultConfig); + } return cloudContentRepository.file(vaultLocation, path); } diff --git a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt index e4769223..adb07a36 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt @@ -18,6 +18,7 @@ import org.cryptomator.domain.exception.license.NoLicenseAvailableException import org.cryptomator.domain.exception.update.GeneralUpdateErrorException import org.cryptomator.domain.exception.update.HashMismatchUpdateCheckException import org.cryptomator.domain.exception.update.SSLHandshakePreAndroid5UpdateCheckException +import org.cryptomator.domain.exception.vaultconfig.UnsupportedMasterkeyLocationException import org.cryptomator.domain.exception.vaultconfig.VaultConfigLoadException import org.cryptomator.domain.exception.vaultconfig.VaultKeyInvalidException import org.cryptomator.domain.exception.vaultconfig.VaultVersionMismatchException @@ -54,6 +55,7 @@ class ExceptionHandlers @Inject constructor(private val context: Context, defaul staticHandler(VaultVersionMismatchException::class.java, R.string.error_vault_version_mismatch) staticHandler(VaultKeyInvalidException::class.java, R.string.error_vault_key_invalid) staticHandler(VaultConfigLoadException::class.java, R.string.error_vault_config_loading) + staticHandler(UnsupportedMasterkeyLocationException::class.java, R.string.error_masterkey_location_not_supported) staticHandler(NoSuchBucketException::class.java, R.string.error_no_such_bucket) exceptionHandlers.add(MissingCryptorExceptionHandler()) exceptionHandlers.add(CancellationExceptionHandler()) diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt index c9375dba..586e6347 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt @@ -107,8 +107,8 @@ class UnlockVaultPresenter @Inject constructor( } view?.showBiometricDialog(vaultModel) } else { - startPrepareUnlockUseCase(vaultModel.toVault()) view?.showEnterPasswordDialog(vaultModel) + startPrepareUnlockUseCase(vaultModel.toVault()) } } diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index 73341cfb..dae556a2 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -38,6 +38,7 @@ General error while loading the vault config Local file isn\'t present anymore after switching back to Cryptomator. Possible changes cannot be propagated back to the cloud. No such bucket + Custom Masterkey location not supported yet