Ver código fonte

remove optional

Jan-Peter Klein 1 mês atrás
pai
commit
c199d1cb3b

+ 4 - 8
src/main/java/org/cryptomator/common/recovery/MasterkeyService.java

@@ -19,7 +19,6 @@ import java.nio.file.StandardOpenOption;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.stream.Stream;
@@ -41,9 +40,9 @@ public final class MasterkeyService {
 		return masterkeyFileAccess.load(masterkeyFilePath, password);
 	}
 
-	public static Optional<CryptorProvider.Scheme> validateRecoveryKeyAndDetectCombo(RecoveryKeyFactory recoveryKeyFactory, //
-																					 Vault vault, String recoveryKey, //
-																					 MasterkeyFileAccess masterkeyFileAccess) throws IllegalArgumentException {
+	public static CryptorProvider.Scheme validateRecoveryKeyAndDetectCombo(RecoveryKeyFactory recoveryKeyFactory, //
+																		   Vault vault, String recoveryKey, //
+																		   MasterkeyFileAccess masterkeyFileAccess) throws IOException, CryptoException {
 		String tmpPass = UUID.randomUUID().toString();
 		try (RecoveryDirectory recoveryDirectory = RecoveryDirectory.create(vault.getPath())) {
 			Path tempRecoveryPath = recoveryDirectory.getRecoveryPath();
@@ -51,11 +50,8 @@ public final class MasterkeyService {
 			Path masterkeyFilePath = tempRecoveryPath.resolve(MASTERKEY_FILENAME);
 
 			try (Masterkey mk = load(masterkeyFileAccess, masterkeyFilePath, tmpPass)) {
-				return detect(mk, vault.getPath());
+				return detect(mk, vault.getPath()).orElseThrow();
 			}
-		} catch (IOException | CryptoException e) {
-			LOG.info("Recovery key validation failed");
-			return Optional.empty();
 		}
 	}
 

+ 12 - 7
src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyValidateController.java

@@ -10,6 +10,7 @@ import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.cryptofs.VaultConfig;
 import org.cryptomator.cryptofs.VaultConfigLoadException;
 import org.cryptomator.cryptofs.VaultKeyInvalidException;
+import org.cryptomator.cryptolib.api.CryptoException;
 import org.cryptomator.cryptolib.api.CryptorProvider;
 import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
 import org.cryptomator.ui.common.FxController;
@@ -26,6 +27,7 @@ import javafx.scene.control.TextArea;
 import javafx.scene.control.TextFormatter;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyEvent;
+import java.io.IOException;
 
 public class RecoveryKeyValidateController implements FxController {
 
@@ -137,14 +139,17 @@ public class RecoveryKeyValidateController implements FxController {
 		switch (recoverType.get()) {
 			case RESTORE_ALL, RESTORE_VAULT_CONFIG -> {
 				try {
-					var combo = MasterkeyService.validateRecoveryKeyAndDetectCombo(recoveryKeyFactory, vault, recoveryKey.get(), masterkeyFileAccess);
-					combo.ifPresent(cipherCombo::set);
-					if (combo.isPresent()) {
-						recoveryKeyState.set(RecoveryKeyState.CORRECT);
-					} else {
-						recoveryKeyState.set(RecoveryKeyState.WRONG);
-					}
+					var scheme = MasterkeyService.validateRecoveryKeyAndDetectCombo(recoveryKeyFactory, vault, recoveryKey.get(), masterkeyFileAccess);
+					cipherCombo.set(scheme);
+					recoveryKeyState.set(RecoveryKeyState.CORRECT);
+				} catch (CryptoException e) {
+					LOG.info("Recovery key is valid but crypto scheme couldn't be determined", e);
+					recoveryKeyState.set(RecoveryKeyState.WRONG);
 				} catch (IllegalArgumentException e) {
+					LOG.info("Recovery key is syntactically invalid", e);
+					recoveryKeyState.set(RecoveryKeyState.INVALID);
+				} catch (IOException e) {
+					LOG.warn("IO error while validating recovery key", e);
 					recoveryKeyState.set(RecoveryKeyState.INVALID);
 				}
 			}