From: AsamK Date: Tue, 21 Jun 2022 15:17:25 +0000 (+0200) Subject: Create master key before storage sync if it doesn't exist yet X-Git-Tag: v0.10.9~12 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/a4db5d616a184b4ef442a37005a0738a276909f5?ds=sidebyside Create master key before storage sync if it doesn't exist yet --- diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index 5548e5ac..6f178e4e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -830,9 +830,7 @@ class ManagerImpl implements Manager { } void retrieveRemoteStorage() throws IOException { - if (account.getStorageKey() != null) { - context.getStorageHelper().readDataFromStorage(); - } + context.getStorageHelper().readDataFromStorage(); } @Override diff --git a/lib/src/main/java/org/asamk/signal/manager/actions/RetrieveStorageDataAction.java b/lib/src/main/java/org/asamk/signal/manager/actions/RetrieveStorageDataAction.java index 28b304ab..8b296006 100644 --- a/lib/src/main/java/org/asamk/signal/manager/actions/RetrieveStorageDataAction.java +++ b/lib/src/main/java/org/asamk/signal/manager/actions/RetrieveStorageDataAction.java @@ -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(); } } diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java index 84d98db2..f849389d 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java @@ -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 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; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index 7268693a..72b759b6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -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;