]> nmode's Git Repositories - signal-cli/commitdiff
Cleanup manager package
authorAsamK <asamk@gmx.de>
Sun, 6 Feb 2022 16:21:39 +0000 (17:21 +0100)
committerAsamK <asamk@gmx.de>
Sun, 6 Feb 2022 16:46:34 +0000 (17:46 +0100)
55 files changed:
lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/MultiAccountManager.java
lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/PathConfig.java
lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java
lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java
lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java
lib/src/main/java/org/asamk/signal/manager/api/AccountCheckException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/api/AttachmentInvalidException.java [moved from lib/src/main/java/org/asamk/signal/manager/AttachmentInvalidException.java with 88% similarity]
lib/src/main/java/org/asamk/signal/manager/api/Identity.java
lib/src/main/java/org/asamk/signal/manager/api/NotMasterDeviceException.java [moved from lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java with 82% similarity]
lib/src/main/java/org/asamk/signal/manager/api/NotRegisteredException.java [moved from lib/src/main/java/org/asamk/signal/manager/NotRegisteredException.java with 79% similarity]
lib/src/main/java/org/asamk/signal/manager/api/StickerPackInvalidException.java [moved from lib/src/main/java/org/asamk/signal/manager/StickerPackInvalidException.java with 80% similarity]
lib/src/main/java/org/asamk/signal/manager/api/TrustLevel.java [moved from lib/src/main/java/org/asamk/signal/manager/TrustLevel.java with 97% similarity]
lib/src/main/java/org/asamk/signal/manager/api/UntrustedIdentityException.java [moved from lib/src/main/java/org/asamk/signal/manager/UntrustedIdentityException.java with 93% similarity]
lib/src/main/java/org/asamk/signal/manager/api/UserAlreadyExistsException.java [moved from lib/src/main/java/org/asamk/signal/manager/UserAlreadyExists.java with 63% similarity]
lib/src/main/java/org/asamk/signal/manager/helper/AttachmentHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/Context.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java
lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java
lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityInfo.java
lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityKeyStore.java
lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyIdentityInfo.java
lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonIdentityKeyStore.java
lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/JsonStickerPack.java [moved from lib/src/main/java/org/asamk/signal/manager/JsonStickerPack.java with 89% similarity]
lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/StickerPackStore.java [moved from lib/src/main/java/org/asamk/signal/manager/StickerPackStore.java with 96% similarity]
lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java
lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java
src/main/java/org/asamk/signal/App.java
src/main/java/org/asamk/signal/ReceiveMessageHandler.java
src/main/java/org/asamk/signal/commands/BlockCommand.java
src/main/java/org/asamk/signal/commands/FinishLinkCommand.java
src/main/java/org/asamk/signal/commands/LinkCommand.java
src/main/java/org/asamk/signal/commands/RemovePinCommand.java
src/main/java/org/asamk/signal/commands/SendCommand.java
src/main/java/org/asamk/signal/commands/SetPinCommand.java
src/main/java/org/asamk/signal/commands/UnblockCommand.java
src/main/java/org/asamk/signal/commands/UpdateConfigurationCommand.java
src/main/java/org/asamk/signal/commands/UpdateContactCommand.java
src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java
src/main/java/org/asamk/signal/commands/UploadStickerPackCommand.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusProvisioningManagerImpl.java
src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java
src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java

index ed70bceebe760cfc31c468663ff1321632aa2e0f..b7a97c469373c3ae4dab5d075f1dba416e35e439 100644 (file)
@@ -1,5 +1,7 @@
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.AccountCheckException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
@@ -9,11 +11,14 @@ import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotRegisteredException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResults;
 import org.asamk.signal.manager.api.StickerPack;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
@@ -38,7 +43,6 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.time.Duration;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -53,7 +57,7 @@ public interface Manager extends Closeable {
             ServiceEnvironment serviceEnvironment,
             String userAgent,
             TrustNewIdentity trustNewIdentity
-    ) throws IOException, NotRegisteredException {
+    ) throws IOException, NotRegisteredException, AccountCheckException {
         var pathConfig = PathConfig.createDefault(settingsPath);
 
         if (!SignalAccount.userExists(pathConfig.dataPath(), number)) {
@@ -70,7 +74,16 @@ public interface Manager extends Closeable {
         account.initDatabase();
         final var serviceEnvironmentConfig = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent);
 
-        return new ManagerImpl(account, pathConfig, serviceEnvironmentConfig, userAgent);
+        final var manager = new ManagerImpl(account, pathConfig, serviceEnvironmentConfig, userAgent);
+
+        try {
+            manager.checkAccountState();
+        } catch (IOException e) {
+            manager.close();
+            throw new AccountCheckException("Error while checking account " + account + ": " + e.getMessage(), e);
+        }
+
+        return manager;
     }
 
     static void initLogger() {
@@ -81,26 +94,8 @@ public interface Manager extends Closeable {
         return PhoneNumberFormatter.isValidNumber(e164Number, countryCode);
     }
 
-    static List<String> getAllLocalAccountNumbers(File settingsPath) {
-        var pathConfig = PathConfig.createDefault(settingsPath);
-        final var dataPath = pathConfig.dataPath();
-        final var files = dataPath.listFiles();
-
-        if (files == null) {
-            return List.of();
-        }
-
-        return Arrays.stream(files)
-                .filter(File::isFile)
-                .map(File::getName)
-                .filter(file -> PhoneNumberFormatter.isValidNumber(file, null))
-                .toList();
-    }
-
     String getSelfNumber();
 
-    void checkAccountState() throws IOException;
-
     /**
      * This is used for checking a set of phone numbers for registration on Signal
      *
index fd536d107349ab911ffb7db76496f4019e5f671e..c15f1612ff82c7e2aad096a4650e604a7e543c64 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
@@ -24,6 +25,7 @@ import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
@@ -31,6 +33,7 @@ import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
 import org.asamk.signal.manager.api.StickerPack;
 import org.asamk.signal.manager.api.StickerPackId;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
@@ -50,6 +53,8 @@ import org.asamk.signal.manager.storage.recipients.Contact;
 import org.asamk.signal.manager.storage.recipients.Profile;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
+import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
 import org.asamk.signal.manager.storage.stickers.Sticker;
 import org.asamk.signal.manager.util.AttachmentUtils;
 import org.asamk.signal.manager.util.KeyUtils;
@@ -89,7 +94,7 @@ import java.util.stream.Stream;
 
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
 
-public class ManagerImpl implements Manager {
+class ManagerImpl implements Manager {
 
     private final static Logger logger = LoggerFactory.getLogger(ManagerImpl.class);
 
@@ -166,8 +171,7 @@ public class ManagerImpl implements Manager {
         return account.getAccount();
     }
 
-    @Override
-    public void checkAccountState() throws IOException {
+    void checkAccountState() throws IOException {
         context.getAccountHelper().checkAccountState();
     }
 
index 15b6059487b3aeec9bcb28f4300d29932d7356e6..9f1cf2fd4035aa7d76e460d86f6664eb1ba8a1a3 100644 (file)
@@ -1,13 +1,58 @@
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.AccountCheckException;
+import org.asamk.signal.manager.api.NotRegisteredException;
+import org.asamk.signal.manager.config.ServiceEnvironment;
+import org.asamk.signal.manager.storage.identities.TrustNewIdentity;
+import org.slf4j.LoggerFactory;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
+
+import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 
 public interface MultiAccountManager extends AutoCloseable {
 
+    static MultiAccountManager init(
+            final File settingsPath,
+            final ServiceEnvironment serviceEnvironment,
+            final String userAgent,
+            final TrustNewIdentity trustNewIdentity
+    ) {
+        final var logger = LoggerFactory.getLogger(MultiAccountManager.class);
+        final var managers = getAllLocalAccountNumbers(settingsPath).stream().map(a -> {
+            try {
+                return Manager.init(a, settingsPath, serviceEnvironment, userAgent, trustNewIdentity);
+            } catch (NotRegisteredException | IOException | AccountCheckException e) {
+                logger.warn("Ignoring {}: {} ({})", a, e.getMessage(), e.getClass().getSimpleName());
+                return null;
+            }
+        }).filter(Objects::nonNull).toList();
+
+        return new MultiAccountManagerImpl(managers, settingsPath, serviceEnvironment, userAgent);
+    }
+
+    static List<String> getAllLocalAccountNumbers(File settingsPath) {
+        var pathConfig = PathConfig.createDefault(settingsPath);
+        final var dataPath = pathConfig.dataPath();
+        final var files = dataPath.listFiles();
+
+        if (files == null) {
+            return List.of();
+        }
+
+        return Arrays.stream(files)
+                .filter(File::isFile)
+                .map(File::getName)
+                .filter(file -> PhoneNumberFormatter.isValidNumber(file, null))
+                .toList();
+    }
+
     List<String> getAccountNumbers();
 
     List<Manager> getManagers();
index 83f0bb269e9da4a9e5512a33053e9fdc7b7e55b7..4c67fd12883b392dac6ad9d9ebb1580f89264fb8 100644 (file)
@@ -17,7 +17,7 @@ import java.util.Set;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 
-public class MultiAccountManagerImpl implements MultiAccountManager {
+class MultiAccountManagerImpl implements MultiAccountManager {
 
     private final static Logger logger = LoggerFactory.getLogger(MultiAccountManagerImpl.class);
 
@@ -25,19 +25,19 @@ public class MultiAccountManagerImpl implements MultiAccountManager {
     private final Set<Consumer<Manager>> onManagerRemovedHandlers = new HashSet<>();
     private final Set<Manager> managers = new HashSet<>();
     private final Map<URI, ProvisioningManager> provisioningManagers = new HashMap<>();
-    private final File dataPath;
+    private final File settingsPath;
     private final ServiceEnvironment serviceEnvironment;
     private final String userAgent;
 
     public MultiAccountManagerImpl(
             final Collection<Manager> managers,
-            final File dataPath,
+            final File settingsPath,
             final ServiceEnvironment serviceEnvironment,
             final String userAgent
     ) {
         this.managers.addAll(managers);
         managers.forEach(m -> m.addClosedListener(() -> this.removeManager(m)));
-        this.dataPath = dataPath;
+        this.settingsPath = settingsPath;
         this.serviceEnvironment = serviceEnvironment;
         this.userAgent = userAgent;
     }
@@ -119,12 +119,12 @@ public class MultiAccountManagerImpl implements MultiAccountManager {
     }
 
     private ProvisioningManager getNewProvisioningManager() {
-        return ProvisioningManager.init(dataPath, serviceEnvironment, userAgent, this::addManager);
+        return ProvisioningManager.init(settingsPath, serviceEnvironment, userAgent, this::addManager);
     }
 
     @Override
     public RegistrationManager getNewRegistrationManager(String account) throws IOException {
-        return RegistrationManager.init(account, dataPath, serviceEnvironment, userAgent, this::addManager);
+        return RegistrationManager.init(account, settingsPath, serviceEnvironment, userAgent, this::addManager);
     }
 
     @Override
index d045ac4ac5a4929100e7d2c3984fccd6eb89a8c1..f3bacdc3dd61e67d76a4889debe05d74236a4677 100644 (file)
@@ -2,11 +2,11 @@ package org.asamk.signal.manager;
 
 import java.io.File;
 
-public record PathConfig(
+record PathConfig(
         File dataPath, File attachmentsPath, File avatarsPath, File stickerPacksPath
 ) {
 
-    public static PathConfig createDefault(final File settingsPath) {
+    static PathConfig createDefault(final File settingsPath) {
         return new PathConfig(new File(settingsPath, "data"),
                 new File(settingsPath, "attachments"),
                 new File(settingsPath, "avatars"),
index 3aa26f31fc81d36bcd34e0b57e41e7a4342bac77..81834220bd0008dc5641e2b776f9111d058af4d5 100644 (file)
@@ -1,5 +1,6 @@
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironment;
 
@@ -32,5 +33,5 @@ public interface ProvisioningManager {
 
     URI getDeviceLinkUri() throws TimeoutException, IOException;
 
-    String finishDeviceLink(String deviceName) throws IOException, TimeoutException, UserAlreadyExists;
+    String finishDeviceLink(String deviceName) throws IOException, TimeoutException, UserAlreadyExistsException;
 }
index 29f90277e38f43493ab0a6537c09ef6458cd1115..bfa5109174a1893ec3680858eee361ca52e441d8 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.asamk.signal.manager;
 
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
 import org.asamk.signal.manager.storage.SignalAccount;
@@ -38,7 +39,7 @@ import java.net.URI;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 
-public class ProvisioningManagerImpl implements ProvisioningManager {
+class ProvisioningManagerImpl implements ProvisioningManager {
 
     private final static Logger logger = LoggerFactory.getLogger(ProvisioningManagerImpl.class);
 
@@ -87,14 +88,14 @@ public class ProvisioningManagerImpl implements ProvisioningManager {
     }
 
     @Override
-    public String finishDeviceLink(String deviceName) throws IOException, TimeoutException, UserAlreadyExists {
+    public String finishDeviceLink(String deviceName) throws IOException, TimeoutException, UserAlreadyExistsException {
         var ret = accountManager.getNewDeviceRegistration(tempIdentityKey);
         var number = ret.getNumber();
 
         logger.info("Received link information from {}, linking in progress ...", number);
 
         if (SignalAccount.userExists(pathConfig.dataPath(), number) && !canRelinkExistingAccount(number)) {
-            throw new UserAlreadyExists(number, SignalAccount.getFileName(pathConfig.dataPath(), number));
+            throw new UserAlreadyExistsException(number, SignalAccount.getFileName(pathConfig.dataPath(), number));
         }
 
         var encryptedDeviceName = deviceName == null
index b5f737e32a7aa2dd0e3237dae264529d0e2cd79b..c48a2e9915d3a4fbb363467f52a8d89dcf7379bc 100644 (file)
@@ -47,7 +47,7 @@ import java.util.function.Consumer;
 
 import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
 
-public class RegistrationManagerImpl implements RegistrationManager {
+class RegistrationManagerImpl implements RegistrationManager {
 
     private final static Logger logger = LoggerFactory.getLogger(RegistrationManagerImpl.class);
 
index 92db1f0fa553fd037e12c05061a3a828f13f56d1..cc894602e79191cb5911323f09f0de796fbca659 100644 (file)
@@ -52,7 +52,7 @@ public class SignalDependencies {
     private ProfileService profileService;
     private SignalServiceCipher cipher;
 
-    public SignalDependencies(
+    SignalDependencies(
             final ServiceEnvironmentConfig serviceEnvironmentConfig,
             final String userAgent,
             final DynamicCredentialsProvider credentialsProvider,
index b905f9b70d378bfb9a8f561e6ec5d6cee7673803..fd4db601655e79ba6deeab722165639e2e21e379 100644 (file)
@@ -21,7 +21,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
  * The monitor is also responsible for sending heartbeats/keep-alive messages to prevent
  * timeouts.
  */
-public final class SignalWebSocketHealthMonitor implements HealthMonitor {
+final class SignalWebSocketHealthMonitor implements HealthMonitor {
 
     private final static Logger logger = LoggerFactory.getLogger(SignalWebSocketHealthMonitor.class);
 
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/AccountCheckException.java b/lib/src/main/java/org/asamk/signal/manager/api/AccountCheckException.java
new file mode 100644 (file)
index 0000000..7968f61
--- /dev/null
@@ -0,0 +1,12 @@
+package org.asamk.signal.manager.api;
+
+public class AccountCheckException extends Exception {
+
+    public AccountCheckException(String message) {
+        super(message);
+    }
+
+    public AccountCheckException(String message, Exception e) {
+        super(message, e);
+    }
+}
similarity index 88%
rename from lib/src/main/java/org/asamk/signal/manager/AttachmentInvalidException.java
rename to lib/src/main/java/org/asamk/signal/manager/api/AttachmentInvalidException.java
index 78fba6e0e696bd65e508a3b6457c9390fdbec59b..4c5aa32e424b7d11fee922e32654e3c5b0dbf86b 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 public class AttachmentInvalidException extends Exception {
 
index 37d298f9b2e1ce606cbb90254f22f8e029cbcce8..65d86d0ac5f578a0e565aa71ee9f4486ee53232d 100644 (file)
@@ -1,6 +1,5 @@
 package org.asamk.signal.manager.api;
 
-import org.asamk.signal.manager.TrustLevel;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.whispersystems.libsignal.IdentityKey;
 
similarity index 82%
rename from lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java
rename to lib/src/main/java/org/asamk/signal/manager/api/NotMasterDeviceException.java
index 1b67597e590b345e19356db77ecb03c565f8106c..22cbb1f7cc82356b77a4c07c773ec94b38c57abc 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 public class NotMasterDeviceException extends Exception {
 
similarity index 79%
rename from lib/src/main/java/org/asamk/signal/manager/NotRegisteredException.java
rename to lib/src/main/java/org/asamk/signal/manager/api/NotRegisteredException.java
index c1b35a1c2f3b5c9e1de5dc8b3bf8fb45e5732971..8b9c5e8e216b26f64ed6751b6d133b147363aec8 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 public class NotRegisteredException extends Exception {
 
similarity index 80%
rename from lib/src/main/java/org/asamk/signal/manager/StickerPackInvalidException.java
rename to lib/src/main/java/org/asamk/signal/manager/api/StickerPackInvalidException.java
index 52869acde3deea1d8e9f7b95533ccef3bad6e61e..0f0271a7225f5b4e132226853610920f3368fecc 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 public class StickerPackInvalidException extends Exception {
 
similarity index 97%
rename from lib/src/main/java/org/asamk/signal/manager/TrustLevel.java
rename to lib/src/main/java/org/asamk/signal/manager/api/TrustLevel.java
index 9d58754cb46355d089497290a69344ac854f7e75..4016f487a6b13f00d75b1ec03622960049674e59 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage;
 import org.whispersystems.signalservice.internal.storage.protos.ContactRecord;
similarity index 93%
rename from lib/src/main/java/org/asamk/signal/manager/UntrustedIdentityException.java
rename to lib/src/main/java/org/asamk/signal/manager/api/UntrustedIdentityException.java
index 318afd264395be20a533ed2ed0bba5e0c87ea22a..7328cf64723318e8b190c8bc67d7c5ae2c0c7894 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 
similarity index 63%
rename from lib/src/main/java/org/asamk/signal/manager/UserAlreadyExists.java
rename to lib/src/main/java/org/asamk/signal/manager/api/UserAlreadyExistsException.java
index 905392c56ec51d560676248999e7e263d7a0ddac..a32cd57ca2bb9c8204e574329b803b0a86112e43 100644 (file)
@@ -1,13 +1,13 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.api;
 
 import java.io.File;
 
-public class UserAlreadyExists extends Exception {
+public class UserAlreadyExistsException extends Exception {
 
     private final String number;
     private final File fileName;
 
-    public UserAlreadyExists(String number, File fileName) {
+    public UserAlreadyExistsException(String number, File fileName) {
         this.number = number;
         this.fileName = fileName;
     }
index 223226da76b6499d11bd22b7f0c55e89126c4804..b7a341527ae46ee302cac1f20272abb9fd913311 100644 (file)
@@ -1,8 +1,8 @@
 package org.asamk.signal.manager.helper;
 
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.AttachmentStore;
 import org.asamk.signal.manager.SignalDependencies;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.util.AttachmentUtils;
 import org.asamk.signal.manager.util.IOUtils;
index 3ef0bf16ec9b0ea06d5fd480339dcd429f40f6e2..11de336ed67150b9f87f7beeb8944b8245395781 100644 (file)
@@ -4,7 +4,7 @@ import org.asamk.signal.manager.AttachmentStore;
 import org.asamk.signal.manager.AvatarStore;
 import org.asamk.signal.manager.JobExecutor;
 import org.asamk.signal.manager.SignalDependencies;
-import org.asamk.signal.manager.StickerPackStore;
+import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
 import org.asamk.signal.manager.storage.SignalAccount;
 
 import java.util.function.Supplier;
index f293280b0b6abdeb2471b801031f2c75737422c8..5e668c15e13ce76ef56adc3472cc089fc3d2abf3 100644 (file)
@@ -1,7 +1,7 @@
 package org.asamk.signal.manager.helper;
 
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.SignalDependencies;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
index 025971a995cfb8093d21907eeb9175f4fc04bfce..149171e676b04a31c016ed01dcf0ab2c342ca7ab 100644 (file)
@@ -1,6 +1,6 @@
 package org.asamk.signal.manager.helper;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.util.Utils;
index eece81d36a43a8298a4f9ba11b93dfd3bd0cbe7c..ac06baabf6584df77c0fd48cfd3358cd53701a2c 100644 (file)
@@ -2,8 +2,8 @@ package org.asamk.signal.manager.helper;
 
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.SignalDependencies;
-import org.asamk.signal.manager.TrustLevel;
-import org.asamk.signal.manager.UntrustedIdentityException;
+import org.asamk.signal.manager.api.TrustLevel;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 import org.asamk.signal.manager.actions.HandleAction;
 import org.asamk.signal.manager.actions.RefreshPreKeysAction;
 import org.asamk.signal.manager.actions.RenewSessionAction;
index 631e271560ddee01f78a6b20351d182a427e142c..8dfc7deb569476b11bf119a85cbebae0021700da 100644 (file)
@@ -2,7 +2,7 @@ package org.asamk.signal.manager.helper;
 
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.SignalDependencies;
-import org.asamk.signal.manager.UntrustedIdentityException;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 import org.asamk.signal.manager.actions.HandleAction;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.messageCache.CachedMessage;
index 2fdb259309a83920342f6805360a6a5fd3a64d1f..c432ad9a99ce5523ee962815692bad32c26bd445 100644 (file)
@@ -1,10 +1,10 @@
 package org.asamk.signal.manager.helper;
 
-import org.asamk.signal.manager.JsonStickerPack;
 import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.StickerPackId;
 import org.asamk.signal.manager.storage.SignalAccount;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
 import org.asamk.signal.manager.util.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index dcf8661411069219de5ab05ab228acc8be2e07ac..960ed1d5973c9e24ccc5f9d4c462c47885a4329a 100644 (file)
@@ -1,7 +1,7 @@
 package org.asamk.signal.manager.helper;
 
 import org.asamk.signal.manager.SignalDependencies;
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.api.PhoneNumberSharingMode;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.storage.SignalAccount;
index 75bd296d24713eed640025ccb85e7cba810e2b4f..0833add71a5e005890fbc0ea0f7f1b5e4044014b 100644 (file)
@@ -1,6 +1,6 @@
 package org.asamk.signal.manager.helper;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.groups.GroupInfoV1;
 import org.asamk.signal.manager.storage.recipients.Contact;
index 16264546437e25a33fc7a93019c1357676021977..d026b25a640c977f2801e91d8af11760cc1fbd87 100644 (file)
@@ -3,7 +3,7 @@ package org.asamk.signal.manager.storage;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.storage.configuration.ConfigurationStore;
index 410b07f6de0976683f95cd3776e2fba4d0b5f328..adcf62044e7624e6a62719ac45e5c3228a2ba103 100644 (file)
@@ -1,6 +1,6 @@
 package org.asamk.signal.manager.storage.identities;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.whispersystems.libsignal.IdentityKey;
 
index 2bc8307b7f8127f66c4f8907bf097c5adda86d2c..580194f367a034aafe0a1cceb1c3b8a994e84e90 100644 (file)
@@ -2,7 +2,7 @@ package org.asamk.signal.manager.storage.identities;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.storage.recipients.RecipientResolver;
 import org.asamk.signal.manager.util.IOUtils;
index 2fa19f428056f9ac74aabd3815ac00d49f1aa9f7..a424bef8135ed92d18e6c70252197d44de7431d8 100644 (file)
@@ -1,6 +1,6 @@
 package org.asamk.signal.manager.storage.protocol;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.whispersystems.libsignal.IdentityKey;
 
index 12f7d59aae784e1ebcc759713d5e80968928be09..f9453a30281a315b33bd7e71e3024bc1252f37fe 100644 (file)
@@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.JsonNode;
 
-import org.asamk.signal.manager.TrustLevel;
+import org.asamk.signal.manager.api.TrustLevel;
 import org.asamk.signal.manager.storage.Utils;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.slf4j.Logger;
similarity index 89%
rename from lib/src/main/java/org/asamk/signal/manager/JsonStickerPack.java
rename to lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/JsonStickerPack.java
index 75e65bcba1f7688b6dd0616f4c887c5858a80bef..8a585f7d883c411e290a7919333dfa1b025b5983 100644 (file)
@@ -1,4 +1,4 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.storage.stickerPacks;
 
 import org.asamk.signal.manager.api.StickerPack;
 
similarity index 96%
rename from lib/src/main/java/org/asamk/signal/manager/StickerPackStore.java
rename to lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/StickerPackStore.java
index 8d7552150761501ba443a6cb74e601dd5057ba46..2943847cd9392b5469e4932ed304c7c035210222 100644 (file)
@@ -1,8 +1,9 @@
-package org.asamk.signal.manager;
+package org.asamk.signal.manager.storage.stickerPacks;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.asamk.signal.manager.api.StickerPackId;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
 import org.asamk.signal.manager.util.IOUtils;
 import org.asamk.signal.manager.util.Utils;
 import org.whispersystems.signalservice.api.util.StreamDetails;
index aadadf95b2922d35a8c88c91038d9ce744dc67d3..793e452e5b4744ffc8f553c1a2b1faf6fddd9a29 100644 (file)
@@ -1,6 +1,6 @@
 package org.asamk.signal.manager.util;
 
-import org.asamk.signal.manager.AttachmentInvalidException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
index bd393397f4cb62727666a043be3db12b3e60e842..c914db4795ff92b119465232770c97ff9d845474 100644 (file)
@@ -2,9 +2,9 @@ package org.asamk.signal.manager.util;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.asamk.signal.manager.JsonStickerPack;
-import org.asamk.signal.manager.StickerPackInvalidException;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifestUpload;
 
index d06cd7988d1e096b3733fbeb42c9583c976458b3..4e5b1e9fcb9be3d3d7a61f3b4132133a099f12c0 100644 (file)
@@ -22,10 +22,11 @@ import org.asamk.signal.dbus.DbusMultiAccountManagerImpl;
 import org.asamk.signal.dbus.DbusProvisioningManagerImpl;
 import org.asamk.signal.dbus.DbusRegistrationManagerImpl;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.MultiAccountManagerImpl;
-import org.asamk.signal.manager.NotRegisteredException;
+import org.asamk.signal.manager.MultiAccountManager;
 import org.asamk.signal.manager.ProvisioningManager;
 import org.asamk.signal.manager.RegistrationManager;
+import org.asamk.signal.manager.api.AccountCheckException;
+import org.asamk.signal.manager.api.NotRegisteredException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironment;
 import org.asamk.signal.manager.storage.identities.TrustNewIdentity;
@@ -46,8 +47,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
 
 import static net.sourceforge.argparse4j.DefaultSettings.VERSION_0_9_0_DEFAULT_SETTINGS;
 
@@ -143,16 +142,16 @@ public class App {
             return;
         }
 
-        final File dataPath;
+        if (!ServiceConfig.isSignalClientAvailable()) {
+            throw new UserErrorException("Missing required native library dependency: libsignal-client");
+        }
+
+        final File configPath;
         var config = ns.getString("config");
         if (config != null) {
-            dataPath = new File(config);
+            configPath = new File(config);
         } else {
-            dataPath = getDefaultDataPath();
-        }
-
-        if (!ServiceConfig.isSignalClientAvailable()) {
-            throw new UserErrorException("Missing required native library dependency: libsignal-client");
+            configPath = getDefaultConfigPath();
         }
 
         final var serviceEnvironmentCli = ns.<ServiceEnvironmentCli>get("service-environment");
@@ -170,23 +169,21 @@ public class App {
                 throw new UserErrorException("You cannot specify a account (phone number) when linking");
             }
 
-            handleProvisioningCommand(provisioningCommand, dataPath, serviceEnvironment, outputWriter);
+            handleProvisioningCommand(provisioningCommand, configPath, serviceEnvironment, outputWriter);
             return;
         }
 
         if (account == null) {
-            var accounts = Manager.getAllLocalAccountNumbers(dataPath);
-
             if (command instanceof MultiLocalCommand multiLocalCommand) {
                 handleMultiLocalCommand(multiLocalCommand,
-                        dataPath,
+                        configPath,
                         serviceEnvironment,
-                        accounts,
                         outputWriter,
                         trustNewIdentity);
                 return;
             }
 
+            var accounts = MultiAccountManager.getAllLocalAccountNumbers(configPath);
             if (accounts.size() == 0) {
                 throw new UserErrorException("No local users found, you first need to register or link an account");
             } else if (accounts.size() > 1) {
@@ -200,7 +197,7 @@ public class App {
         }
 
         if (command instanceof RegistrationCommand registrationCommand) {
-            handleRegistrationCommand(registrationCommand, account, dataPath, serviceEnvironment);
+            handleRegistrationCommand(registrationCommand, account, configPath, serviceEnvironment);
             return;
         }
 
@@ -210,7 +207,7 @@ public class App {
 
         handleLocalCommand((LocalCommand) command,
                 account,
-                dataPath,
+                configPath,
                 serviceEnvironment,
                 outputWriter,
                 trustNewIdentity);
@@ -218,11 +215,11 @@ public class App {
 
     private void handleProvisioningCommand(
             final ProvisioningCommand command,
-            final File dataPath,
+            final File configPath,
             final ServiceEnvironment serviceEnvironment,
             final OutputWriter outputWriter
     ) throws CommandException {
-        var pm = ProvisioningManager.init(dataPath, serviceEnvironment, BaseConfig.USER_AGENT);
+        var pm = ProvisioningManager.init(configPath, serviceEnvironment, BaseConfig.USER_AGENT);
         command.handleCommand(ns, pm, outputWriter);
     }
 
@@ -245,12 +242,12 @@ public class App {
     private void handleRegistrationCommand(
             final RegistrationCommand command,
             final String account,
-            final File dataPath,
+            final File configPath,
             final ServiceEnvironment serviceEnvironment
     ) throws CommandException {
         final RegistrationManager manager;
         try {
-            manager = RegistrationManager.init(account, dataPath, serviceEnvironment, BaseConfig.USER_AGENT);
+            manager = RegistrationManager.init(account, configPath, serviceEnvironment, BaseConfig.USER_AGENT);
         } catch (Throwable e) {
             throw new UnexpectedErrorException("Error loading or creating state file: "
                     + e.getMessage()
@@ -283,12 +280,12 @@ public class App {
     private void handleLocalCommand(
             final LocalCommand command,
             final String account,
-            final File dataPath,
+            final File configPath,
             final ServiceEnvironment serviceEnvironment,
             final OutputWriter outputWriter,
             final TrustNewIdentity trustNewIdentity
     ) throws CommandException {
-        try (var m = loadManager(account, dataPath, serviceEnvironment, trustNewIdentity)) {
+        try (var m = loadManager(account, configPath, serviceEnvironment, trustNewIdentity)) {
             command.handleCommand(ns, m, outputWriter);
         } catch (IOException e) {
             logger.warn("Cleanup failed", e);
@@ -313,25 +310,15 @@ public class App {
 
     private void handleMultiLocalCommand(
             final MultiLocalCommand command,
-            final File dataPath,
+            final File configPath,
             final ServiceEnvironment serviceEnvironment,
-            final List<String> accounts,
             final OutputWriter outputWriter,
             final TrustNewIdentity trustNewIdentity
     ) throws CommandException {
-        final var managers = new ArrayList<Manager>();
-        for (String a : accounts) {
-            try {
-                managers.add(loadManager(a, dataPath, serviceEnvironment, trustNewIdentity));
-            } catch (CommandException e) {
-                logger.warn("Ignoring {}: {}", a, e.getMessage());
-            }
-        }
-
-        try (var multiAccountManager = new MultiAccountManagerImpl(managers,
-                dataPath,
+        try (var multiAccountManager = MultiAccountManager.init(configPath,
                 serviceEnvironment,
-                BaseConfig.USER_AGENT)) {
+                BaseConfig.USER_AGENT,
+                trustNewIdentity)) {
             command.handleCommand(ns, multiAccountManager, outputWriter);
         }
     }
@@ -351,16 +338,22 @@ public class App {
 
     private Manager loadManager(
             final String account,
-            final File dataPath,
+            final File configPath,
             final ServiceEnvironment serviceEnvironment,
             final TrustNewIdentity trustNewIdentity
     ) throws CommandException {
-        Manager manager;
         logger.trace("Loading account file for {}", account);
         try {
-            manager = Manager.init(account, dataPath, serviceEnvironment, BaseConfig.USER_AGENT, trustNewIdentity);
+            return Manager.init(account, configPath, serviceEnvironment, BaseConfig.USER_AGENT, trustNewIdentity);
         } catch (NotRegisteredException e) {
             throw new UserErrorException("User " + account + " is not registered.");
+        } catch (AccountCheckException ace) {
+            if (ace.getCause() instanceof IOException e) {
+                throw new IOErrorException("Error while checking account " + account + ": " + e.getMessage(), e);
+            } else {
+                throw new UnexpectedErrorException("Error while checking account " + account + ": " + ace.getMessage(),
+                        ace);
+            }
         } catch (Throwable e) {
             throw new UnexpectedErrorException("Error loading state file for user "
                     + account
@@ -370,20 +363,6 @@ public class App {
                     + e.getClass().getSimpleName()
                     + ")", e);
         }
-
-        logger.trace("Checking account state");
-        try {
-            manager.checkAccountState();
-        } catch (IOException e) {
-            try {
-                manager.close();
-            } catch (IOException ie) {
-                logger.warn("Failed to close broken account", ie);
-            }
-            throw new IOErrorException("Error while checking account " + account + ": " + e.getMessage(), e);
-        }
-
-        return manager;
     }
 
     private void initDbusClient(
@@ -457,7 +436,7 @@ public class App {
     /**
      * @return the default data directory to be used by signal-cli.
      */
-    private static File getDefaultDataPath() {
+    private static File getDefaultConfigPath() {
         return new File(IOUtils.getDataHomeDir(), "signal-cli");
     }
 }
index 314b0c6834cd728141e0cb1b701a393a97a534e5..f5fce554fd7aa5d29afaca45bc89edd7b8dd1a73 100644 (file)
@@ -1,7 +1,7 @@
 package org.asamk.signal;
 
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.UntrustedIdentityException;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 import org.asamk.signal.manager.api.MessageEnvelope;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.groups.GroupId;
index cf2b19814a8f3aba9103ec133e505f754bc838bf..7d72b1c51ac740500e562f50bf8219731c31228b 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.output.OutputWriter;
index ce0de00020f85ac4f63076a517d7f5741cef2731..f49de10349afa38ad5139fc636fe1751bbdaf0dd 100644 (file)
@@ -6,7 +6,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.MultiAccountManager;
-import org.asamk.signal.manager.UserAlreadyExists;
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.asamk.signal.output.JsonWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,7 +56,7 @@ public class FinishLinkCommand implements JsonRpcMultiCommand<FinishLinkCommand.
             throw new UserErrorException("Link request timed out, please try again.");
         } catch (IOException e) {
             throw new IOErrorException("Link request error: " + e.getMessage(), e);
-        } catch (UserAlreadyExists e) {
+        } catch (UserAlreadyExistsException e) {
             throw new UserErrorException("The user "
                     + e.getNumber()
                     + " already exists\nDelete \""
index c216c63ace6591e9c6c339ff6a08fd88a9e592ce..f49e0c24c9d18e2a84c402a7588127556bb6c7bc 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.ProvisioningManager;
-import org.asamk.signal.manager.UserAlreadyExists;
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.asamk.signal.output.OutputWriter;
 import org.asamk.signal.output.PlainTextWriter;
 import org.slf4j.Logger;
@@ -49,7 +49,7 @@ public class LinkCommand implements ProvisioningCommand {
             throw new UserErrorException("Link request timed out, please try again.");
         } catch (IOException e) {
             throw new IOErrorException("Link request error: " + e.getMessage(), e);
-        } catch (UserAlreadyExists e) {
+        } catch (UserAlreadyExistsException e) {
             throw new UserErrorException("The user "
                     + e.getNumber()
                     + " already exists\nDelete \""
index 59478c524cf39a27bded2cf8da516effa0f84c36..a4ffc564abbb837aaf9dae048d5d99443951f2f2 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.output.OutputWriter;
 
 import java.io.IOException;
index 74209feb54d8cbb8ec5e74b3d0d206532445f9e5..fda0c8e6fd93cf3bdd19be6fd2c7b35a154c2a8d 100644 (file)
@@ -7,8 +7,8 @@ import net.sourceforge.argparse4j.inf.Subparser;
 import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.RecipientIdentifier;
index 3e4ef0b84f23738b05c7d353b62d80856681c3a4..45c332d938ec223333f59a2b47d592cedea549b1 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.output.OutputWriter;
 
 import java.io.IOException;
index e6be15001fdef995d05ede16e8c8a6fc61025417..af49236cdbd7fae84142165f4ed13e16e565572b 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.output.OutputWriter;
index 0e02b8c2eb8cbb85608004a5cc8fb316204ff373..804804d4cbdb222df11f69669cd3f1bf02b31dca 100644 (file)
@@ -7,8 +7,8 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Configuration;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.output.OutputWriter;
 
 import java.io.IOException;
index d951ece984327f4dbaaf51f74ce0e9ba65d2f759..6ae549ae20b9efbe5161e722421dcb27bd0cb445 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.output.OutputWriter;
 import org.asamk.signal.util.CommandUtil;
index 36a35b7580f18594596fba265cca7ecdef593886..2a6d7d156aff7a7055939468be2a1fceb2e6fbae 100644 (file)
@@ -7,8 +7,8 @@ import net.sourceforge.argparse4j.inf.Subparser;
 import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UpdateGroup;
index b70d9e0d9cb3994f1c974d840c5517791a122ee7..aad9a1e5131d54dd31035f9ada291f9a623db706 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.StickerPackInvalidException;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.output.JsonWriter;
 import org.asamk.signal.output.OutputWriter;
 import org.asamk.signal.output.PlainTextWriter;
index cec835fcca9537cff82f20f13c9d6eecdc753537..33b149d91052514507c19ba304e2b59eaa449871 100644 (file)
@@ -2,10 +2,9 @@ package org.asamk.signal.dbus;
 
 import org.asamk.Signal;
 import org.asamk.signal.DbusConfig;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
-import org.asamk.signal.manager.StickerPackInvalidException;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
 import org.asamk.signal.manager.api.Group;
@@ -14,6 +13,7 @@ import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
@@ -84,11 +84,6 @@ public class DbusManagerImpl implements Manager {
         return signal.getSelfNumber();
     }
 
-    @Override
-    public void checkAccountState() throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public Map<String, Pair<String, UUID>> areUsersRegistered(final Set<String> numbers) throws IOException {
         final var numbersList = new ArrayList<>(numbers);
index cba2b5e46805bb4e6db62c0d0aef252cde4e2812..2e026c8a88b36f1943db17bbb39514ed24bf2097 100644 (file)
@@ -2,7 +2,7 @@ package org.asamk.signal.dbus;
 
 import org.asamk.SignalControl;
 import org.asamk.signal.manager.ProvisioningManager;
-import org.asamk.signal.manager.UserAlreadyExists;
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.freedesktop.dbus.connections.impl.DBusConnection;
 
 import java.io.IOException;
@@ -27,9 +27,7 @@ public class DbusProvisioningManagerImpl implements ProvisioningManager {
     }
 
     public DbusProvisioningManagerImpl(
-            final SignalControl signalControl,
-            DBusConnection connection,
-            URI deviceLinkUri
+            final SignalControl signalControl, DBusConnection connection, URI deviceLinkUri
     ) {
         this.signalControl = signalControl;
         this.connection = connection;
@@ -47,7 +45,7 @@ public class DbusProvisioningManagerImpl implements ProvisioningManager {
     }
 
     @Override
-    public String finishDeviceLink(final String deviceName) throws IOException, TimeoutException, UserAlreadyExists {
+    public String finishDeviceLink(final String deviceName) throws IOException, TimeoutException, UserAlreadyExistsException {
         return signalControl.finishLink(deviceLinkUri.toString(), deviceName);
     }
 }
index 2d2114447ac538e751c8a16a94f730cc8ef5486b..f80b91d6544d7c44a07ca4a6148b43614a8c5dda 100644 (file)
@@ -7,7 +7,7 @@ import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.MultiAccountManager;
 import org.asamk.signal.manager.ProvisioningManager;
 import org.asamk.signal.manager.RegistrationManager;
-import org.asamk.signal.manager.UserAlreadyExists;
+import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 import org.asamk.signal.manager.api.PinLockedException;
@@ -100,7 +100,7 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl {
                 final ProvisioningManager provisioningManager = c.getProvisioningManagerFor(deviceLinkUri);
                 try {
                     provisioningManager.finishDeviceLink(newDeviceName);
-                } catch (IOException | TimeoutException | UserAlreadyExists e) {
+                } catch (IOException | TimeoutException | UserAlreadyExistsException e) {
                     e.printStackTrace();
                 }
             });
@@ -127,7 +127,7 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl {
         try {
             final var provisioningManager = c.getProvisioningManagerFor(new URI(deviceLinkUri));
             return provisioningManager.finishDeviceLink(newDeviceName);
-        } catch (TimeoutException | IOException | UserAlreadyExists | URISyntaxException e) {
+        } catch (TimeoutException | IOException | UserAlreadyExistsException | URISyntaxException e) {
             throw new SignalControl.Error.Failure(e.getClass().getSimpleName() + " " + e.getMessage());
         }
     }
index ae9edfec82a863ddb331506f6acf34fc7fe6d638..671966a079aee0cd0dc3759e6048c69cd3912d5f 100644 (file)
@@ -2,16 +2,16 @@ package org.asamk.signal.dbus;
 
 import org.asamk.Signal;
 import org.asamk.signal.BaseConfig;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.NotMasterDeviceException;
-import org.asamk.signal.manager.StickerPackInvalidException;
+import org.asamk.signal.manager.api.StickerPackInvalidException;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.Identity;
 import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.InvalidNumberException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
+import org.asamk.signal.manager.api.NotMasterDeviceException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendMessageResult;
index ab5d73e1e0d3b4b05fe83f68056a0d28fa0225c2..264b7fcee9a6a9bd359e31debf9c052c4925cd5d 100644 (file)
@@ -3,7 +3,7 @@ package org.asamk.signal.json;
 import com.fasterxml.jackson.annotation.JsonInclude;
 
 import org.asamk.signal.manager.Manager;
-import org.asamk.signal.manager.UntrustedIdentityException;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
 import org.asamk.signal.manager.api.MessageEnvelope;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;