]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/SignalAccountFiles.java
Update libsignal-service
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / SignalAccountFiles.java
index f397b5348e769b2985723eddc6f38b405e9fc586..03c44013eedd2cc22c4637beab9761729f910c46 100644 (file)
@@ -2,16 +2,21 @@ package org.asamk.signal.manager;
 
 import org.asamk.signal.manager.api.AccountCheckException;
 import org.asamk.signal.manager.api.NotRegisteredException;
+import org.asamk.signal.manager.api.ServiceEnvironment;
 import org.asamk.signal.manager.config.ServiceConfig;
-import org.asamk.signal.manager.config.ServiceEnvironment;
 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
+import org.asamk.signal.manager.internal.AccountFileUpdaterImpl;
+import org.asamk.signal.manager.internal.ManagerImpl;
+import org.asamk.signal.manager.internal.MultiAccountManagerImpl;
+import org.asamk.signal.manager.internal.PathConfig;
+import org.asamk.signal.manager.internal.ProvisioningManagerImpl;
+import org.asamk.signal.manager.internal.RegistrationManagerImpl;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.accounts.AccountsStore;
-import org.asamk.signal.manager.storage.identities.TrustNewIdentity;
 import org.asamk.signal.manager.util.KeyUtils;
-import org.signal.libsignal.protocol.util.KeyHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.whispersystems.signalservice.api.push.exceptions.DeprecatedVersionException;
 
 import java.io.File;
 import java.io.IOException;
@@ -27,27 +32,27 @@ public class SignalAccountFiles {
     private final ServiceEnvironment serviceEnvironment;
     private final ServiceEnvironmentConfig serviceEnvironmentConfig;
     private final String userAgent;
-    private final TrustNewIdentity trustNewIdentity;
+    private final Settings settings;
     private final AccountsStore accountsStore;
 
     public SignalAccountFiles(
             final File settingsPath,
             final ServiceEnvironment serviceEnvironment,
             final String userAgent,
-            final TrustNewIdentity trustNewIdentity
+            final Settings settings
     ) throws IOException {
         this.pathConfig = PathConfig.createDefault(settingsPath);
         this.serviceEnvironment = serviceEnvironment;
         this.serviceEnvironmentConfig = ServiceConfig.getServiceEnvironmentConfig(this.serviceEnvironment, userAgent);
         this.userAgent = userAgent;
-        this.trustNewIdentity = trustNewIdentity;
+        this.settings = settings;
         this.accountsStore = new AccountsStore(pathConfig.dataPath(), serviceEnvironment, accountPath -> {
             if (accountPath == null || !SignalAccount.accountFileExists(pathConfig.dataPath(), accountPath)) {
                 return null;
             }
 
             try {
-                return SignalAccount.load(pathConfig.dataPath(), accountPath, false, trustNewIdentity);
+                return SignalAccount.load(pathConfig.dataPath(), accountPath, false, settings);
             } catch (Exception e) {
                 return null;
             }
@@ -65,6 +70,9 @@ public class SignalAccountFiles {
             } catch (NotRegisteredException | IOException | AccountCheckException e) {
                 logger.warn("Ignoring {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
                 return null;
+            } catch (Throwable e) {
+                logger.error("Failed to load {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
+                throw e;
             }
         }).filter(Objects::nonNull).toList();
 
@@ -86,7 +94,7 @@ public class SignalAccountFiles {
             throw new NotRegisteredException();
         }
 
-        var account = SignalAccount.load(pathConfig.dataPath(), accountPath, true, trustNewIdentity);
+        var account = SignalAccount.load(pathConfig.dataPath(), accountPath, true, settings);
         if (!number.equals(account.getNumber())) {
             account.close();
             throw new IOException("Number in account file doesn't match expected number: " + account.getNumber());
@@ -111,6 +119,9 @@ public class SignalAccountFiles {
 
         try {
             manager.checkAccountState();
+        } catch (DeprecatedVersionException e) {
+            manager.close();
+            throw new AccountCheckException("signal-cli version is too old for the Signal-Server, please update.");
         } catch (IOException e) {
             manager.close();
             throw new AccountCheckException("Error while checking account " + number + ": " + e.getMessage(), e);
@@ -148,7 +159,6 @@ public class SignalAccountFiles {
             final var newAccountPath = accountPath == null ? accountsStore.addAccount(number, null) : accountPath;
             var aciIdentityKey = KeyUtils.generateIdentityKeyPair();
             var pniIdentityKey = KeyUtils.generateIdentityKeyPair();
-            var registrationId = KeyHelper.generateRegistrationId(false);
 
             var profileKey = KeyUtils.createProfileKey();
             var account = SignalAccount.create(pathConfig.dataPath(),
@@ -157,9 +167,9 @@ public class SignalAccountFiles {
                     serviceEnvironment,
                     aciIdentityKey,
                     pniIdentityKey,
-                    registrationId,
                     profileKey,
-                    trustNewIdentity);
+                    settings);
+            account.initDatabase();
 
             return new RegistrationManagerImpl(account,
                     pathConfig,
@@ -169,11 +179,12 @@ public class SignalAccountFiles {
                     new AccountFileUpdaterImpl(accountsStore, newAccountPath));
         }
 
-        var account = SignalAccount.load(pathConfig.dataPath(), accountPath, true, trustNewIdentity);
+        var account = SignalAccount.load(pathConfig.dataPath(), accountPath, true, settings);
         if (!number.equals(account.getNumber())) {
             account.close();
             throw new IOException("Number in account file doesn't match expected number: " + account.getNumber());
         }
+        account.initDatabase();
 
         return new RegistrationManagerImpl(account,
                 pathConfig,