From e32ee4da2f12b27a381d864ea0f4d5be019d3b6a Mon Sep 17 00:00:00 2001 From: crschnick Date: Sun, 12 May 2024 08:11:47 +0000 Subject: [PATCH] Fix secrets not being properly rewritten when passphrase is removed --- .../io/xpipe/app/storage/DataStoreSecret.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/storage/DataStoreSecret.java b/app/src/main/java/io/xpipe/app/storage/DataStoreSecret.java index 0c71cee9..98cabe2a 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStoreSecret.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStoreSecret.java @@ -36,9 +36,21 @@ public class DataStoreSecret { } public boolean requiresRewrite() { - return AppPrefs.get() != null - && AppPrefs.get().getLockCrypt().get() != null - && !Objects.equals(AppPrefs.get().getLockCrypt().get(), usedPasswordLockCrypt); + if (AppPrefs.get() == null) { + return false; + } + + // Special check for empty passphrases + var wasEmpty = usedPasswordLockCrypt == null || usedPasswordLockCrypt.isEmpty(); + var isEmpty = AppPrefs.get().getLockCrypt().get() == null || AppPrefs.get().getLockCrypt().get().isEmpty(); + if (wasEmpty && isEmpty) { + return false; + } + if (wasEmpty != isEmpty) { + return true; + } + + return !Objects.equals(AppPrefs.get().getLockCrypt().get(), usedPasswordLockCrypt); } public char[] getSecret() {