]> nmode's Git Repositories - signal-cli/commitdiff
Prevent updateContact and block commands on linked devices
authorAsamK <asamk@gmx.de>
Mon, 3 May 2021 17:46:35 +0000 (19:46 +0200)
committerAsamK <asamk@gmx.de>
Mon, 3 May 2021 17:46:35 +0000 (19:46 +0200)
The changes would be overwritten with the next sync anyway

Fixes #600

lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java [new file with mode: 0644]
src/main/java/org/asamk/signal/commands/BlockCommand.java
src/main/java/org/asamk/signal/commands/UnblockCommand.java
src/main/java/org/asamk/signal/commands/UpdateContactCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 827d6d91742c6db4d9d5f1eef99accc863cd8b8c..38f37ed2a1d417dcc7343e42201b0feaa6b5b2fe 100644 (file)
@@ -1088,14 +1088,22 @@ public class Manager implements Closeable {
         return contact == null || contact.getName() == null ? "" : contact.getName();
     }
 
         return contact == null || contact.getName() == null ? "" : contact.getName();
     }
 
-    public void setContactName(String number, String name) throws InvalidNumberException {
+    public void setContactName(String number, String name) throws InvalidNumberException, NotMasterDeviceException {
+        if (!account.isMasterDevice()) {
+            throw new NotMasterDeviceException();
+        }
         final var recipientId = canonicalizeAndResolveRecipient(number);
         var contact = account.getContactStore().getContact(recipientId);
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
         account.getContactStore().storeContact(recipientId, builder.withName(name).build());
     }
 
         final var recipientId = canonicalizeAndResolveRecipient(number);
         var contact = account.getContactStore().getContact(recipientId);
         final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
         account.getContactStore().storeContact(recipientId, builder.withName(name).build());
     }
 
-    public void setContactBlocked(String number, boolean blocked) throws InvalidNumberException {
+    public void setContactBlocked(
+            String number, boolean blocked
+    ) throws InvalidNumberException, NotMasterDeviceException {
+        if (!account.isMasterDevice()) {
+            throw new NotMasterDeviceException();
+        }
         setContactBlocked(canonicalizeAndResolveRecipient(number), blocked);
     }
 
         setContactBlocked(canonicalizeAndResolveRecipient(number), blocked);
     }
 
diff --git a/lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java b/lib/src/main/java/org/asamk/signal/manager/NotMasterDeviceException.java
new file mode 100644 (file)
index 0000000..1b67597
--- /dev/null
@@ -0,0 +1,8 @@
+package org.asamk.signal.manager;
+
+public class NotMasterDeviceException extends Exception {
+
+    public NotMasterDeviceException() {
+        super("This function is not supported for linked devices.");
+    }
+}
index 98fce6676d018e504928ce817e572a390d6f98d5..19466c584c1cc9e1120dc95cf69a48e20297a507 100644 (file)
@@ -3,7 +3,10 @@ package org.asamk.signal.commands;
 import net.sourceforge.argparse4j.inf.Namespace;
 import net.sourceforge.argparse4j.inf.Subparser;
 
 import net.sourceforge.argparse4j.inf.Namespace;
 import net.sourceforge.argparse4j.inf.Subparser;
 
+import org.asamk.signal.commands.exceptions.CommandException;
+import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.NotMasterDeviceException;
 import org.asamk.signal.manager.groups.GroupIdFormatException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.util.Util;
 import org.asamk.signal.manager.groups.GroupIdFormatException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.util.Util;
@@ -23,12 +26,14 @@ public class BlockCommand implements LocalCommand {
     }
 
     @Override
     }
 
     @Override
-    public void handleCommand(final Namespace ns, final Manager m) {
+    public void handleCommand(final Namespace ns, final Manager m) throws CommandException {
         for (var contact_number : ns.<String>getList("contact")) {
             try {
                 m.setContactBlocked(contact_number, true);
             } catch (InvalidNumberException e) {
                 logger.warn("Invalid number {}: {}", contact_number, e.getMessage());
         for (var contact_number : ns.<String>getList("contact")) {
             try {
                 m.setContactBlocked(contact_number, true);
             } catch (InvalidNumberException e) {
                 logger.warn("Invalid number {}: {}", contact_number, e.getMessage());
+            } catch (NotMasterDeviceException e) {
+                throw new UserErrorException("This command doesn't work on linked devices.");
             }
         }
 
             }
         }
 
index 6e067ee5399852c719703bc5ca0613bc7d9a5d59..4a208f82b434cef66b2525cc7795b60de0ccda46 100644 (file)
@@ -4,7 +4,9 @@ import net.sourceforge.argparse4j.inf.Namespace;
 import net.sourceforge.argparse4j.inf.Subparser;
 
 import org.asamk.signal.commands.exceptions.CommandException;
 import net.sourceforge.argparse4j.inf.Subparser;
 
 import org.asamk.signal.commands.exceptions.CommandException;
+import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.NotMasterDeviceException;
 import org.asamk.signal.manager.groups.GroupIdFormatException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.util.Util;
 import org.asamk.signal.manager.groups.GroupIdFormatException;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.util.Util;
@@ -30,6 +32,8 @@ public class UnblockCommand implements LocalCommand {
                 m.setContactBlocked(contactNumber, false);
             } catch (InvalidNumberException e) {
                 logger.warn("Invalid number: {}", contactNumber);
                 m.setContactBlocked(contactNumber, false);
             } catch (InvalidNumberException e) {
                 logger.warn("Invalid number: {}", contactNumber);
+            } catch (NotMasterDeviceException e) {
+                throw new UserErrorException("This command doesn't work on linked devices.");
             }
         }
 
             }
         }
 
index c8ad613b9ba1fceecfaeed24416fa22916414b00..ade7cbd33e76cfd34546aa89ee330bf60ed0699c 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.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.NotMasterDeviceException;
 import org.whispersystems.signalservice.api.util.InvalidNumberException;
 
 import java.io.IOException;
 import org.whispersystems.signalservice.api.util.InvalidNumberException;
 
 import java.io.IOException;
@@ -30,16 +31,18 @@ public class UpdateContactCommand implements LocalCommand {
         var name = ns.getString("name");
 
         try {
         var name = ns.getString("name");
 
         try {
-            m.setContactName(number, name);
-
             var expiration = ns.getInt("expiration");
             if (expiration != null) {
                 m.setExpirationTimer(number, expiration);
             }
             var expiration = ns.getInt("expiration");
             if (expiration != null) {
                 m.setExpirationTimer(number, expiration);
             }
+
+            m.setContactName(number, name);
         } catch (InvalidNumberException e) {
             throw new UserErrorException("Invalid contact number: " + e.getMessage());
         } catch (IOException e) {
             throw new IOErrorException("Update contact error: " + e.getMessage());
         } catch (InvalidNumberException e) {
             throw new UserErrorException("Invalid contact number: " + e.getMessage());
         } catch (IOException e) {
             throw new IOErrorException("Update contact error: " + e.getMessage());
+        } catch (NotMasterDeviceException e) {
+            throw new UserErrorException("This command doesn't work on linked devices.");
         }
     }
 }
         }
     }
 }
index ae19c97883727adfee3a75a49e4f4296fb276655..879e602816c80ff9afcd6becad4f1bc78139806a 100644 (file)
@@ -4,6 +4,7 @@ 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.BaseConfig;
 import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.NotMasterDeviceException;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
@@ -260,6 +261,8 @@ public class DbusSignalImpl implements Signal {
             m.setContactName(number, name);
         } catch (InvalidNumberException e) {
             throw new Error.InvalidNumber(e.getMessage());
             m.setContactName(number, name);
         } catch (InvalidNumberException e) {
             throw new Error.InvalidNumber(e.getMessage());
+        } catch (NotMasterDeviceException e) {
+            throw new Error.Failure("This command doesn't work on linked devices.");
         }
     }
 
         }
     }
 
@@ -269,6 +272,8 @@ public class DbusSignalImpl implements Signal {
             m.setContactBlocked(number, blocked);
         } catch (InvalidNumberException e) {
             throw new Error.InvalidNumber(e.getMessage());
             m.setContactBlocked(number, blocked);
         } catch (InvalidNumberException e) {
             throw new Error.InvalidNumber(e.getMessage());
+        } catch (NotMasterDeviceException e) {
+            throw new Error.Failure("This command doesn't work on linked devices.");
         }
     }
 
         }
     }