]> nmode's Git Repositories - signal-cli/commitdiff
Check if number is registered on Signal before adding to group
authorAsamK <asamk@gmx.de>
Sat, 13 Aug 2016 11:42:56 +0000 (13:42 +0200)
committerAsamK <asamk@gmx.de>
Sat, 13 Aug 2016 11:42:56 +0000 (13:42 +0200)
Fixes #15

src/main/java/org/asamk/signal/Manager.java

index 987a5cacd4b147f38bdf474225a66c4496fb196c..117c1ba35e8e2a5022e29f76a0f5a9ef8065c850 100644 (file)
@@ -44,6 +44,7 @@ import org.whispersystems.signalservice.api.crypto.SignalServiceCipher;
 import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
 import org.whispersystems.signalservice.api.messages.*;
 import org.whispersystems.signalservice.api.messages.multidevice.*;
+import org.whispersystems.signalservice.api.push.ContactTokenDetails;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 import org.whispersystems.signalservice.api.push.TrustStore;
 import org.whispersystems.signalservice.api.push.exceptions.*;
@@ -568,6 +569,18 @@ class Manager implements Signal {
         sendMessage(message, g.members);
     }
 
+    private static String join(CharSequence separator, Iterable<? extends CharSequence> list) {
+        StringBuilder buf = new StringBuilder();
+        for (CharSequence str : list) {
+            if (buf.length() > 0) {
+                buf.append(separator);
+            }
+            buf.append(str);
+        }
+
+        return buf.toString();
+    }
+
     public byte[] sendUpdateGroupMessage(byte[] groupId, String name, Collection<String> members, String avatarFile) throws IOException, EncapsulatedExceptions, GroupNotFoundException, AttachmentInvalidException {
         GroupInfo g;
         if (groupId == null) {
@@ -583,14 +596,30 @@ class Manager implements Signal {
         }
 
         if (members != null) {
+            Set<String> newMembers = new HashSet<>();
             for (String member : members) {
                 try {
-                    g.members.add(canonicalizeNumber(member));
+                    member = canonicalizeNumber(member);
                 } catch (InvalidNumberException e) {
                     System.err.println("Failed to add member \"" + member + "\" to group: " + e.getMessage());
                     System.err.println("Aborting…");
                     System.exit(1);
                 }
+                if (g.members.contains(member)) {
+                    continue;
+                }
+                newMembers.add(member);
+                g.members.add(member);
+            }
+            final List<ContactTokenDetails> contacts = accountManager.getContacts(newMembers);
+            if (contacts.size() != newMembers.size()) {
+                // Some of the new members are not registered on Signal
+                for (ContactTokenDetails contact : contacts) {
+                    newMembers.remove(contact.getNumber());
+                }
+                System.err.println("Failed to add members " + join(", ", newMembers) + " to group: Not registered on Signal");
+                System.err.println("Aborting…");
+                System.exit(1);
             }
         }