]> nmode's Git Repositories - signal-cli/commitdiff
Create master key before storage sync if it doesn't exist yet
authorAsamK <asamk@gmx.de>
Tue, 21 Jun 2022 15:17:25 +0000 (17:17 +0200)
committerAsamK <asamk@gmx.de>
Tue, 21 Jun 2022 18:38:10 +0000 (20:38 +0200)
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/actions/RetrieveStorageDataAction.java
lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java

index 5548e5ac0f8a75acd8e11a6af6330c70ae24f2c2..6f178e4eedc23922f7cdae968ed1a95c4e1b7743 100644 (file)
@@ -830,9 +830,7 @@ class ManagerImpl implements Manager {
     }
 
     void retrieveRemoteStorage() throws IOException {
-        if (account.getStorageKey() != null) {
-            context.getStorageHelper().readDataFromStorage();
-        }
+        context.getStorageHelper().readDataFromStorage();
     }
 
     @Override
index 28b304aba3770046bdd2a3db22e071f30f8b38d2..8b29600685e5321fcf178ddb192649ead1d162f6 100644 (file)
@@ -15,10 +15,6 @@ public class RetrieveStorageDataAction implements HandleAction {
 
     @Override
     public void execute(Context context) throws Throwable {
-        if (context.getAccount().getStorageKey() != null) {
-            context.getStorageHelper().readDataFromStorage();
-        } else if (!context.getAccount().isPrimaryDevice()) {
-            context.getSyncHelper().requestSyncKeys();
-        }
+        context.getStorageHelper().readDataFromStorage();
     }
 }
index 84d98db28f948e1ef692826d605fd545eba6d939..f849389d967f7fa92854c5a4dafa5bbabb0c1536 100644 (file)
@@ -43,11 +43,18 @@ public class StorageHelper {
     }
 
     public void readDataFromStorage() throws IOException {
+        final var storageKey = account.getOrCreateStorageKey();
+        if (storageKey == null) {
+            logger.debug("Storage key unknown, requesting from primary device.");
+            context.getSyncHelper().requestSyncKeys();
+            return;
+        }
+
         logger.debug("Reading data from remote storage");
         Optional<SignalStorageManifest> manifest;
         try {
             manifest = dependencies.getAccountManager()
-                    .getStorageManifestIfDifferentVersion(account.getStorageKey(), account.getStorageManifestVersion());
+                    .getStorageManifestIfDifferentVersion(storageKey, account.getStorageManifestVersion());
         } catch (InvalidKeyException e) {
             logger.warn("Manifest couldn't be decrypted, ignoring.");
             return;
index 7268693aa4b7788815ca7c02548bbb381b4a8c13..72b759b676490f371f6ad3058c0293dc61fbd8c4 100644 (file)
@@ -1288,6 +1288,13 @@ public class SignalAccount implements Closeable {
         return storageKey;
     }
 
+    public StorageKey getOrCreateStorageKey() {
+        if (isPrimaryDevice()) {
+            return getOrCreatePinMasterKey().deriveStorageServiceKey();
+        }
+        return storageKey;
+    }
+
     public void setStorageKey(final StorageKey storageKey) {
         if (storageKey.equals(this.storageKey)) {
             return;