From 5cccf521032954d7ad8e3f70e3cbef2ce1293e85 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 6 Feb 2022 17:21:39 +0100 Subject: [PATCH] Cleanup manager package --- .../org/asamk/signal/manager/Manager.java | 37 ++++---- .../org/asamk/signal/manager/ManagerImpl.java | 10 +- .../signal/manager/MultiAccountManager.java | 45 +++++++++ .../manager/MultiAccountManagerImpl.java | 12 +-- .../org/asamk/signal/manager/PathConfig.java | 4 +- .../signal/manager/ProvisioningManager.java | 3 +- .../manager/ProvisioningManagerImpl.java | 7 +- .../manager/RegistrationManagerImpl.java | 2 +- .../signal/manager/SignalDependencies.java | 2 +- .../manager/SignalWebSocketHealthMonitor.java | 2 +- .../manager/api/AccountCheckException.java | 12 +++ .../{ => api}/AttachmentInvalidException.java | 2 +- .../asamk/signal/manager/api/Identity.java | 1 - .../{ => api}/NotMasterDeviceException.java | 2 +- .../{ => api}/NotRegisteredException.java | 2 +- .../StickerPackInvalidException.java | 2 +- .../signal/manager/{ => api}/TrustLevel.java | 2 +- .../{ => api}/UntrustedIdentityException.java | 2 +- .../UserAlreadyExistsException.java} | 6 +- .../manager/helper/AttachmentHelper.java | 2 +- .../asamk/signal/manager/helper/Context.java | 2 +- .../signal/manager/helper/GroupHelper.java | 2 +- .../signal/manager/helper/IdentityHelper.java | 2 +- .../helper/IncomingMessageHandler.java | 4 +- .../signal/manager/helper/ReceiveHelper.java | 2 +- .../signal/manager/helper/StickerHelper.java | 2 +- .../signal/manager/helper/StorageHelper.java | 2 +- .../signal/manager/helper/SyncHelper.java | 2 +- .../signal/manager/storage/SignalAccount.java | 2 +- .../storage/identities/IdentityInfo.java | 2 +- .../storage/identities/IdentityKeyStore.java | 2 +- .../storage/protocol/LegacyIdentityInfo.java | 2 +- .../protocol/LegacyJsonIdentityKeyStore.java | 2 +- .../stickerPacks}/JsonStickerPack.java | 2 +- .../stickerPacks}/StickerPackStore.java | 3 +- .../signal/manager/util/AttachmentUtils.java | 2 +- .../signal/manager/util/StickerUtils.java | 4 +- src/main/java/org/asamk/signal/App.java | 91 +++++++------------ .../asamk/signal/ReceiveMessageHandler.java | 2 +- .../asamk/signal/commands/BlockCommand.java | 2 +- .../signal/commands/FinishLinkCommand.java | 4 +- .../asamk/signal/commands/LinkCommand.java | 4 +- .../signal/commands/RemovePinCommand.java | 2 +- .../asamk/signal/commands/SendCommand.java | 2 +- .../asamk/signal/commands/SetPinCommand.java | 2 +- .../asamk/signal/commands/UnblockCommand.java | 2 +- .../commands/UpdateConfigurationCommand.java | 2 +- .../signal/commands/UpdateContactCommand.java | 2 +- .../signal/commands/UpdateGroupCommand.java | 2 +- .../commands/UploadStickerPackCommand.java | 2 +- .../asamk/signal/dbus/DbusManagerImpl.java | 11 +-- .../dbus/DbusProvisioningManagerImpl.java | 8 +- .../signal/dbus/DbusSignalControlImpl.java | 6 +- .../org/asamk/signal/dbus/DbusSignalImpl.java | 6 +- .../signal/json/JsonMessageEnvelope.java | 2 +- 55 files changed, 189 insertions(+), 159 deletions(-) create mode 100644 lib/src/main/java/org/asamk/signal/manager/api/AccountCheckException.java rename lib/src/main/java/org/asamk/signal/manager/{ => api}/AttachmentInvalidException.java (88%) rename lib/src/main/java/org/asamk/signal/manager/{ => api}/NotMasterDeviceException.java (82%) rename lib/src/main/java/org/asamk/signal/manager/{ => api}/NotRegisteredException.java (79%) rename lib/src/main/java/org/asamk/signal/manager/{ => api}/StickerPackInvalidException.java (80%) rename lib/src/main/java/org/asamk/signal/manager/{ => api}/TrustLevel.java (97%) rename lib/src/main/java/org/asamk/signal/manager/{ => api}/UntrustedIdentityException.java (93%) rename lib/src/main/java/org/asamk/signal/manager/{UserAlreadyExists.java => api/UserAlreadyExistsException.java} (63%) rename lib/src/main/java/org/asamk/signal/manager/{ => storage/stickerPacks}/JsonStickerPack.java (89%) rename lib/src/main/java/org/asamk/signal/manager/{ => storage/stickerPacks}/StickerPackStore.java (96%) diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index ed70bcee..b7a97c46 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -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 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 * 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 fd536d10..c15f1612 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -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(); } diff --git a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManager.java b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManager.java index 15b60594..9f1cf2fd 100644 --- a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManager.java @@ -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 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 getAccountNumbers(); List getManagers(); diff --git a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java index 83f0bb26..4c67fd12 100644 --- a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java @@ -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> onManagerRemovedHandlers = new HashSet<>(); private final Set managers = new HashSet<>(); private final Map provisioningManagers = new HashMap<>(); - private final File dataPath; + private final File settingsPath; private final ServiceEnvironment serviceEnvironment; private final String userAgent; public MultiAccountManagerImpl( final Collection 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 diff --git a/lib/src/main/java/org/asamk/signal/manager/PathConfig.java b/lib/src/main/java/org/asamk/signal/manager/PathConfig.java index d045ac4a..f3bacdc3 100644 --- a/lib/src/main/java/org/asamk/signal/manager/PathConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/PathConfig.java @@ -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"), diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java index 3aa26f31..81834220 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -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; } diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java index 29f90277..bfa51091 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManagerImpl.java @@ -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 diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java index b5f737e3..c48a2e99 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java @@ -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); diff --git a/lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java b/lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java index 92db1f0f..cc894602 100644 --- a/lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java +++ b/lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java @@ -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, diff --git a/lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java b/lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java index b905f9b7..fd4db601 100644 --- a/lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java +++ b/lib/src/main/java/org/asamk/signal/manager/SignalWebSocketHealthMonitor.java @@ -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 index 00000000..7968f615 --- /dev/null +++ b/lib/src/main/java/org/asamk/signal/manager/api/AccountCheckException.java @@ -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); + } +} diff --git a/lib/src/main/java/org/asamk/signal/manager/AttachmentInvalidException.java b/lib/src/main/java/org/asamk/signal/manager/api/AttachmentInvalidException.java 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 78fba6e0..4c5aa32e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/AttachmentInvalidException.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/AttachmentInvalidException.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.api; public class AttachmentInvalidException extends Exception { diff --git a/lib/src/main/java/org/asamk/signal/manager/api/Identity.java b/lib/src/main/java/org/asamk/signal/manager/api/Identity.java index 37d298f9..65d86d0a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/Identity.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/Identity.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java b/lib/src/main/java/org/asamk/signal/manager/api/NotMasterDeviceException.java 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 1b67597e..22cbb1f7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/NotMasterDeviceException.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.api; public class NotMasterDeviceException extends Exception { diff --git a/lib/src/main/java/org/asamk/signal/manager/NotRegisteredException.java b/lib/src/main/java/org/asamk/signal/manager/api/NotRegisteredException.java 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 c1b35a1c..8b9c5e8e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/NotRegisteredException.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/NotRegisteredException.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.api; public class NotRegisteredException extends Exception { diff --git a/lib/src/main/java/org/asamk/signal/manager/StickerPackInvalidException.java b/lib/src/main/java/org/asamk/signal/manager/api/StickerPackInvalidException.java 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 52869acd..0f0271a7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/StickerPackInvalidException.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/StickerPackInvalidException.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.api; public class StickerPackInvalidException extends Exception { diff --git a/lib/src/main/java/org/asamk/signal/manager/TrustLevel.java b/lib/src/main/java/org/asamk/signal/manager/api/TrustLevel.java 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 9d58754c..4016f487 100644 --- a/lib/src/main/java/org/asamk/signal/manager/TrustLevel.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/TrustLevel.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/UntrustedIdentityException.java b/lib/src/main/java/org/asamk/signal/manager/api/UntrustedIdentityException.java 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 318afd26..7328cf64 100644 --- a/lib/src/main/java/org/asamk/signal/manager/UntrustedIdentityException.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/UntrustedIdentityException.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.api; import org.asamk.signal.manager.storage.recipients.RecipientAddress; diff --git a/lib/src/main/java/org/asamk/signal/manager/UserAlreadyExists.java b/lib/src/main/java/org/asamk/signal/manager/api/UserAlreadyExistsException.java 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 905392c5..a32cd57c 100644 --- a/lib/src/main/java/org/asamk/signal/manager/UserAlreadyExists.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/UserAlreadyExistsException.java @@ -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; } diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/AttachmentHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/AttachmentHelper.java index 223226da..b7a34152 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/AttachmentHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/AttachmentHelper.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java index 3ef0bf16..11de336e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/Context.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/Context.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java index f293280b..5e668c15 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java index 025971a9..149171e6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index eece81d3..ac06baab 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java index 631e2715..8dfc7deb 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/ReceiveHelper.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java index 2fdb2593..c432ad9a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java @@ -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; 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 dcf86614..960ed1d5 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 @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java index 75bd296d..0833add7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java @@ -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; 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 16264546..d026b25a 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 @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityInfo.java b/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityInfo.java index 410b07f6..adcf6204 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityInfo.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityInfo.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityKeyStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityKeyStore.java index 2bc8307b..580194f3 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityKeyStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/identities/IdentityKeyStore.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyIdentityInfo.java b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyIdentityInfo.java index 2fa19f42..a424bef8 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyIdentityInfo.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyIdentityInfo.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonIdentityKeyStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonIdentityKeyStore.java index 12f7d59a..f9453a30 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonIdentityKeyStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonIdentityKeyStore.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/JsonStickerPack.java b/lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/JsonStickerPack.java 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 75e65bcb..8a585f7d 100644 --- a/lib/src/main/java/org/asamk/signal/manager/JsonStickerPack.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/JsonStickerPack.java @@ -1,4 +1,4 @@ -package org.asamk.signal.manager; +package org.asamk.signal.manager.storage.stickerPacks; import org.asamk.signal.manager.api.StickerPack; diff --git a/lib/src/main/java/org/asamk/signal/manager/StickerPackStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/StickerPackStore.java 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 8d755215..2943847c 100644 --- a/lib/src/main/java/org/asamk/signal/manager/StickerPackStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/stickerPacks/StickerPackStore.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java b/lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java index aadadf95..793e452e 100644 --- a/lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java +++ b/lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java @@ -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; diff --git a/lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java b/lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java index bd393397..c914db47 100644 --- a/lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java +++ b/lib/src/main/java/org/asamk/signal/manager/util/StickerUtils.java @@ -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; diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index d06cd798..4e5b1e9f 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -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.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 accounts, final OutputWriter outputWriter, final TrustNewIdentity trustNewIdentity ) throws CommandException { - final var managers = new ArrayList(); - 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"); } } diff --git a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java index 314b0c68..f5fce554 100644 --- a/src/main/java/org/asamk/signal/ReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/ReceiveMessageHandler.java @@ -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; diff --git a/src/main/java/org/asamk/signal/commands/BlockCommand.java b/src/main/java/org/asamk/signal/commands/BlockCommand.java index cf2b1981..7d72b1c5 100644 --- a/src/main/java/org/asamk/signal/commands/BlockCommand.java +++ b/src/main/java/org/asamk/signal/commands/BlockCommand.java @@ -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; diff --git a/src/main/java/org/asamk/signal/commands/FinishLinkCommand.java b/src/main/java/org/asamk/signal/commands/FinishLinkCommand.java index ce0de000..f49de103 100644 --- a/src/main/java/org/asamk/signal/commands/FinishLinkCommand.java +++ b/src/main/java/org/asamk/signal/commands/FinishLinkCommand.java @@ -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> areUsersRegistered(final Set numbers) throws IOException { final var numbersList = new ArrayList<>(numbers); diff --git a/src/main/java/org/asamk/signal/dbus/DbusProvisioningManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusProvisioningManagerImpl.java index cba2b5e4..2e026c8a 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusProvisioningManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusProvisioningManagerImpl.java @@ -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); } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java index 2d211444..f80b91d6 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java @@ -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()); } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index ae9edfec..671966a0 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -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; diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index ab5d73e1..264b7fce 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -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; -- 2.50.1