]> nmode's Git Repositories - signal-cli/commitdiff
Prevent sending to groups that the user has quit
authorAsamK <asamk@gmx.de>
Fri, 12 Aug 2016 16:24:30 +0000 (18:24 +0200)
committerAsamK <asamk@gmx.de>
Fri, 12 Aug 2016 16:24:30 +0000 (18:24 +0200)
Fixes #23

src/main/java/org/asamk/Signal.java
src/main/java/org/asamk/signal/Main.java
src/main/java/org/asamk/signal/Manager.java
src/main/java/org/asamk/signal/NotAGroupMemberException.java [new file with mode: 0644]

index 9a868109387d91c6bf0a0cbd7a124aaf6e953e0c..02fc22ddf7b352e322176bddc91693db6e3dc023 100644 (file)
@@ -5,7 +5,6 @@ import org.asamk.signal.GroupNotFoundException;
 import org.freedesktop.dbus.DBusInterface;
 import org.freedesktop.dbus.DBusSignal;
 import org.freedesktop.dbus.exceptions.DBusException;
 import org.freedesktop.dbus.DBusInterface;
 import org.freedesktop.dbus.DBusSignal;
 import org.freedesktop.dbus.exceptions.DBusException;
-import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
 import org.whispersystems.signalservice.api.push.exceptions.EncapsulatedExceptions;
 
 import java.io.IOException;
 import org.whispersystems.signalservice.api.push.exceptions.EncapsulatedExceptions;
 
 import java.io.IOException;
index 25807a6b5e58840bdc16aed3e7ffd81a720e2aed..4b95d58eeafbe1ca5b514c23917818a9e63660bf 100644 (file)
@@ -310,6 +310,9 @@ public class Main {
                         } catch (GroupNotFoundException e) {
                             handleGroupNotFoundException(e);
                             return 1;
                         } catch (GroupNotFoundException e) {
                             handleGroupNotFoundException(e);
                             return 1;
+                        } catch (NotAGroupMemberException e) {
+                            handleNotAGroupMemberException(e);
+                            return 1;
                         } catch (AttachmentInvalidException e) {
                             System.err.println("Failed to add attachment: " + e.getMessage());
                             System.err.println("Aborting sending.");
                         } catch (AttachmentInvalidException e) {
                             System.err.println("Failed to add attachment: " + e.getMessage());
                             System.err.println("Aborting sending.");
@@ -401,6 +404,9 @@ public class Main {
                     } catch (GroupNotFoundException e) {
                         handleGroupNotFoundException(e);
                         return 1;
                     } catch (GroupNotFoundException e) {
                         handleGroupNotFoundException(e);
                         return 1;
+                    } catch (NotAGroupMemberException e) {
+                        handleNotAGroupMemberException(e);
+                        return 1;
                     }
 
                     break;
                     }
 
                     break;
@@ -433,6 +439,9 @@ public class Main {
                     } catch (GroupNotFoundException e) {
                         handleGroupNotFoundException(e);
                         return 1;
                     } catch (GroupNotFoundException e) {
                         handleGroupNotFoundException(e);
                         return 1;
+                    } catch (NotAGroupMemberException e) {
+                        handleNotAGroupMemberException(e);
+                        return 1;
                     } catch (EncapsulatedExceptions e) {
                         handleEncapsulatedExceptions(e);
                         return 3;
                     } catch (EncapsulatedExceptions e) {
                         handleEncapsulatedExceptions(e);
                         return 3;
@@ -553,6 +562,13 @@ public class Main {
         System.err.println("Aborting sending.");
     }
 
         System.err.println("Aborting sending.");
     }
 
+    private static void handleNotAGroupMemberException(NotAGroupMemberException e) {
+        System.err.println("Failed to send to group: " + e.getMessage());
+        System.err.println("Update the group on another device to readd the user to this group.");
+        System.err.println("Aborting sending.");
+    }
+
+
     private static void handleDBusExecutionException(DBusExecutionException e) {
         System.err.println("Cannot connect to dbus: " + e.getMessage());
         System.err.println("Aborting.");
     private static void handleDBusExecutionException(DBusExecutionException e) {
         System.err.println("Cannot connect to dbus: " + e.getMessage());
         System.err.println("Aborting.");
index 68f664554ced9ac4e4e1a772c87c26edf4cb5887..987a5cacd4b147f38bdf474225a66c4496fb196c 100644 (file)
@@ -515,6 +515,19 @@ class Manager implements Signal {
         return Optional.of(createAttachment(file));
     }
 
         return Optional.of(createAttachment(file));
     }
 
+    private GroupInfo getGroupForSending(byte[] groupId) throws GroupNotFoundException, NotAGroupMemberException {
+        GroupInfo g = groupStore.getGroup(groupId);
+        if (g == null) {
+            throw new GroupNotFoundException(groupId);
+        }
+        for (String member : g.members) {
+            if (member.equals(this.username)) {
+                return g;
+            }
+        }
+        throw new NotAGroupMemberException(groupId, g.name);
+    }
+
     @Override
     public void sendGroupMessage(String messageText, List<String> attachments,
                                  byte[] groupId)
     @Override
     public void sendGroupMessage(String messageText, List<String> attachments,
                                  byte[] groupId)
@@ -531,10 +544,7 @@ class Manager implements Signal {
         }
         SignalServiceDataMessage message = messageBuilder.build();
 
         }
         SignalServiceDataMessage message = messageBuilder.build();
 
-        GroupInfo g = groupStore.getGroup(groupId);
-        if (g == null) {
-            throw new GroupNotFoundException(groupId);
-        }
+        final GroupInfo g = getGroupForSending(groupId);
 
         // Don't send group message to ourself
         final List<String> membersSend = new ArrayList<>(g.members);
 
         // Don't send group message to ourself
         final List<String> membersSend = new ArrayList<>(g.members);
@@ -551,10 +561,7 @@ class Manager implements Signal {
                 .asGroupMessage(group)
                 .build();
 
                 .asGroupMessage(group)
                 .build();
 
-        final GroupInfo g = groupStore.getGroup(groupId);
-        if (g == null) {
-            throw new GroupNotFoundException(groupId);
-        }
+        final GroupInfo g = getGroupForSending(groupId);
         g.members.remove(this.username);
         groupStore.updateGroup(g);
 
         g.members.remove(this.username);
         groupStore.updateGroup(g);
 
@@ -568,10 +575,7 @@ class Manager implements Signal {
             g = new GroupInfo(Util.getSecretBytes(16));
             g.members.add(username);
         } else {
             g = new GroupInfo(Util.getSecretBytes(16));
             g.members.add(username);
         } else {
-            g = groupStore.getGroup(groupId);
-            if (g == null) {
-                throw new GroupNotFoundException(groupId);
-            }
+            g = getGroupForSending(groupId);
         }
 
         if (name != null) {
         }
 
         if (name != null) {
diff --git a/src/main/java/org/asamk/signal/NotAGroupMemberException.java b/src/main/java/org/asamk/signal/NotAGroupMemberException.java
new file mode 100644 (file)
index 0000000..52ba423
--- /dev/null
@@ -0,0 +1,14 @@
+package org.asamk.signal;
+
+import org.freedesktop.dbus.exceptions.DBusExecutionException;
+
+public class NotAGroupMemberException extends DBusExecutionException {
+
+    public NotAGroupMemberException(String message) {
+        super(message);
+    }
+
+    public NotAGroupMemberException(byte[] groupId, String groupName) {
+        super("User is not a member in group: " + groupName + " (" + Base64.encodeBytes(groupId) + ")");
+    }
+}