]> nmode's Git Repositories - signal-cli/commitdiff
Improve addDevice error message
authorAsamK <asamk@gmx.de>
Sun, 8 Sep 2024 07:00:34 +0000 (09:00 +0200)
committerAsamK <asamk@gmx.de>
Sun, 8 Sep 2024 07:00:34 +0000 (09:00 +0200)
Fixes #1573

lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/api/DeviceLimitExceededException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java
src/main/java/org/asamk/signal/commands/AddDeviceCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 736f4e081893bd69890ae01ba63a0fb512d2e7b0..4b0869944e361c493dfb78ac53e3f00baec11197 100644 (file)
@@ -6,6 +6,7 @@ import org.asamk.signal.manager.api.CaptchaRejectedException;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
+import org.asamk.signal.manager.api.DeviceLimitExceededException;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.Group;
 import org.asamk.signal.manager.api.GroupId;
@@ -148,7 +149,7 @@ public interface Manager extends Closeable {
 
     void removeLinkedDevices(int deviceId) throws IOException, NotPrimaryDeviceException;
 
-    void addDeviceLink(DeviceLinkUrl linkUri) throws IOException, InvalidDeviceLinkException, NotPrimaryDeviceException;
+    void addDeviceLink(DeviceLinkUrl linkUri) throws IOException, InvalidDeviceLinkException, NotPrimaryDeviceException, DeviceLimitExceededException;
 
     void setRegistrationLockPin(Optional<String> pin) throws IOException, NotPrimaryDeviceException;
 
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/DeviceLimitExceededException.java b/lib/src/main/java/org/asamk/signal/manager/api/DeviceLimitExceededException.java
new file mode 100644 (file)
index 0000000..e24cc2a
--- /dev/null
@@ -0,0 +1,12 @@
+package org.asamk.signal.manager.api;
+
+public class DeviceLimitExceededException extends Exception {
+
+    public DeviceLimitExceededException(final String message) {
+        super(message);
+    }
+
+    public DeviceLimitExceededException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+}
index 5c74a37fda218303e302e7c0c986bec4757afd73..0ec45cb9c4695d4223582ea31d64e95217f30fc1 100644 (file)
@@ -39,6 +39,7 @@ import org.whispersystems.signalservice.api.push.exceptions.UsernameIsNotReserve
 import org.whispersystems.signalservice.api.push.exceptions.UsernameMalformedException;
 import org.whispersystems.signalservice.api.push.exceptions.UsernameTakenException;
 import org.whispersystems.signalservice.api.util.DeviceNameUtil;
+import org.whispersystems.signalservice.internal.push.DeviceLimitExceededException;
 import org.whispersystems.signalservice.internal.push.KyberPreKeyEntity;
 import org.whispersystems.signalservice.internal.push.OutgoingPushMessage;
 import org.whispersystems.signalservice.internal.push.SyncMessage;
@@ -466,8 +467,13 @@ public class AccountHelper {
         dependencies.getAccountManager().setAccountAttributes(account.getAccountAttributes(null));
     }
 
-    public void addDevice(DeviceLinkUrl deviceLinkInfo) throws IOException, InvalidDeviceLinkException {
-        var verificationCode = dependencies.getAccountManager().getNewDeviceVerificationCode();
+    public void addDevice(DeviceLinkUrl deviceLinkInfo) throws IOException, InvalidDeviceLinkException, org.asamk.signal.manager.api.DeviceLimitExceededException {
+        String verificationCode;
+        try {
+            verificationCode = dependencies.getAccountManager().getNewDeviceVerificationCode();
+        } catch (DeviceLimitExceededException e) {
+            throw new org.asamk.signal.manager.api.DeviceLimitExceededException("Too many linked devices", e);
+        }
 
         try {
             dependencies.getAccountManager()
index 6549b088d8872403b4a7455e0dfacd8ddcd8216e..39f59ccdc6438e4276479365123b55ddbf948751 100644 (file)
@@ -23,6 +23,7 @@ import org.asamk.signal.manager.api.CaptchaRejectedException;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.Configuration;
 import org.asamk.signal.manager.api.Device;
+import org.asamk.signal.manager.api.DeviceLimitExceededException;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.Group;
 import org.asamk.signal.manager.api.GroupId;
@@ -487,7 +488,7 @@ public class ManagerImpl implements Manager {
     }
 
     @Override
-    public void addDeviceLink(DeviceLinkUrl linkUrl) throws IOException, InvalidDeviceLinkException, NotPrimaryDeviceException {
+    public void addDeviceLink(DeviceLinkUrl linkUrl) throws IOException, InvalidDeviceLinkException, NotPrimaryDeviceException, DeviceLimitExceededException {
         if (!account.isPrimaryDevice()) {
             throw new NotPrimaryDeviceException();
         }
index 2813f4af59f5a74f72b84966a355183df0fe14a0..c40e49012b32f871dbc73fb08923f94393520e3e 100644 (file)
@@ -7,6 +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.api.DeviceLimitExceededException;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.NotPrimaryDeviceException;
@@ -53,8 +54,10 @@ public class AddDeviceCommand implements JsonRpcLocalCommand {
             logger.error("Add device link failed: {}", e.getMessage());
             throw new IOErrorException("Add device link failed", e);
         } catch (InvalidDeviceLinkException e) {
-            logger.error("Invalid device link");
+            logger.info("Invalid device link");
             throw new UserErrorException("Invalid device link", e);
+        } catch (DeviceLimitExceededException e) {
+            throw new UserErrorException("Account has too many linked devices already", e);
         } catch (NotPrimaryDeviceException e) {
             throw new UserErrorException("This command doesn't work on linked devices.");
         }
index fae0c0a551446a4f7de0d1e362d40fd76086800e..1b8b78255588f465c50adf23f3c1e4f1ce19c7cb 100644 (file)
@@ -5,6 +5,7 @@ import org.asamk.signal.BaseConfig;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.CaptchaRejectedException;
+import org.asamk.signal.manager.api.DeviceLimitExceededException;
 import org.asamk.signal.manager.api.DeviceLinkUrl;
 import org.asamk.signal.manager.api.GroupId;
 import org.asamk.signal.manager.api.GroupInviteLinkUrl;
@@ -189,7 +190,7 @@ public class DbusSignalImpl implements Signal, AutoCloseable {
         try {
             var deviceLinkUrl = DeviceLinkUrl.parseDeviceLinkUri(new URI(uri));
             m.addDeviceLink(deviceLinkUrl);
-        } catch (IOException | InvalidDeviceLinkException e) {
+        } catch (IOException | InvalidDeviceLinkException | DeviceLimitExceededException e) {
             throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage());
         } catch (NotPrimaryDeviceException e) {
             throw new Error.Failure("This command doesn't work on linked devices.");