]> nmode's Git Repositories - signal-cli/commitdiff
Prevent non-admins from sending to announcement groups
authorAsamK <asamk@gmx.de>
Thu, 26 Aug 2021 07:34:06 +0000 (09:34 +0200)
committerAsamK <asamk@gmx.de>
Thu, 26 Aug 2021 07:34:06 +0000 (09:34 +0200)
Only reactions are allowed

lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/groups/GroupSendingNotAllowedException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java
src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java
src/main/java/org/asamk/signal/commands/SendCommand.java
src/main/java/org/asamk/signal/commands/SendReactionCommand.java
src/main/java/org/asamk/signal/commands/SendTypingCommand.java
src/main/java/org/asamk/signal/commands/UpdateGroupCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 3857d803b25bab8e9fd971dc051f97cd1ee6cc5f..1369623552dc1ef13d9eab9f9ae218b2ebee8a36 100644 (file)
@@ -31,6 +31,7 @@ import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
@@ -697,7 +698,7 @@ public class Manager implements Closeable {
             File avatarFile,
             Integer expirationTimer,
             Boolean isAnnouncementGroup
             File avatarFile,
             Integer expirationTimer,
             Boolean isAnnouncementGroup
-    ) throws IOException, GroupNotFoundException, AttachmentInvalidException, NotAGroupMemberException {
+    ) throws IOException, GroupNotFoundException, AttachmentInvalidException, NotAGroupMemberException, GroupSendingNotAllowedException {
         return groupHelper.updateGroup(groupId,
                 name,
                 description,
         return groupHelper.updateGroup(groupId,
                 name,
                 description,
@@ -722,7 +723,7 @@ public class Manager implements Closeable {
 
     public SendMessageResults sendMessage(
             SignalServiceDataMessage.Builder messageBuilder, Set<RecipientIdentifier> recipients
 
     public SendMessageResults sendMessage(
             SignalServiceDataMessage.Builder messageBuilder, Set<RecipientIdentifier> recipients
-    ) throws IOException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         var results = new HashMap<RecipientIdentifier, List<SendMessageResult>>();
         long timestamp = System.currentTimeMillis();
         messageBuilder.withTimestamp(timestamp);
         var results = new HashMap<RecipientIdentifier, List<SendMessageResult>>();
         long timestamp = System.currentTimeMillis();
         messageBuilder.withTimestamp(timestamp);
@@ -745,7 +746,7 @@ public class Manager implements Closeable {
 
     public void sendTypingMessage(
             SignalServiceTypingMessage.Action action, Set<RecipientIdentifier> recipients
 
     public void sendTypingMessage(
             SignalServiceTypingMessage.Action action, Set<RecipientIdentifier> recipients
-    ) throws IOException, UntrustedIdentityException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, UntrustedIdentityException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         final var timestamp = System.currentTimeMillis();
         for (var recipient : recipients) {
             if (recipient instanceof RecipientIdentifier.Single) {
         final var timestamp = System.currentTimeMillis();
         for (var recipient : recipients) {
             if (recipient instanceof RecipientIdentifier.Single) {
@@ -806,7 +807,7 @@ public class Manager implements Closeable {
 
     public SendMessageResults sendMessage(
             Message message, Set<RecipientIdentifier> recipients
 
     public SendMessageResults sendMessage(
             Message message, Set<RecipientIdentifier> recipients
-    ) throws IOException, AttachmentInvalidException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, AttachmentInvalidException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         final var messageBuilder = SignalServiceDataMessage.newBuilder();
         applyMessage(messageBuilder, message);
         return sendMessage(messageBuilder, recipients);
         final var messageBuilder = SignalServiceDataMessage.newBuilder();
         applyMessage(messageBuilder, message);
         return sendMessage(messageBuilder, recipients);
@@ -836,7 +837,7 @@ public class Manager implements Closeable {
 
     public SendMessageResults sendRemoteDeleteMessage(
             long targetSentTimestamp, Set<RecipientIdentifier> recipients
 
     public SendMessageResults sendRemoteDeleteMessage(
             long targetSentTimestamp, Set<RecipientIdentifier> recipients
-    ) throws IOException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         var delete = new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp);
         final var messageBuilder = SignalServiceDataMessage.newBuilder().withRemoteDelete(delete);
         return sendMessage(messageBuilder, recipients);
         var delete = new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp);
         final var messageBuilder = SignalServiceDataMessage.newBuilder().withRemoteDelete(delete);
         return sendMessage(messageBuilder, recipients);
@@ -848,7 +849,7 @@ public class Manager implements Closeable {
             RecipientIdentifier.Single targetAuthor,
             long targetSentTimestamp,
             Set<RecipientIdentifier> recipients
             RecipientIdentifier.Single targetAuthor,
             long targetSentTimestamp,
             Set<RecipientIdentifier> recipients
-    ) throws IOException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         var targetAuthorRecipientId = resolveRecipient(targetAuthor);
         var reaction = new SignalServiceDataMessage.Reaction(emoji,
                 remove,
         var targetAuthorRecipientId = resolveRecipient(targetAuthor);
         var reaction = new SignalServiceDataMessage.Reaction(emoji,
                 remove,
@@ -864,7 +865,7 @@ public class Manager implements Closeable {
         try {
             return sendMessage(messageBuilder,
                     recipients.stream().map(RecipientIdentifier.class::cast).collect(Collectors.toSet()));
         try {
             return sendMessage(messageBuilder,
                     recipients.stream().map(RecipientIdentifier.class::cast).collect(Collectors.toSet()));
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new AssertionError(e);
         } finally {
             for (var recipient : recipients) {
             throw new AssertionError(e);
         } finally {
             for (var recipient : recipients) {
@@ -931,7 +932,7 @@ public class Manager implements Closeable {
         final var messageBuilder = SignalServiceDataMessage.newBuilder().asExpirationUpdate();
         try {
             sendMessage(messageBuilder, Set.of(recipient));
         final var messageBuilder = SignalServiceDataMessage.newBuilder().asExpirationUpdate();
         try {
             sendMessage(messageBuilder, Set.of(recipient));
-        } catch (NotAGroupMemberException | GroupNotFoundException e) {
+        } catch (NotAGroupMemberException | GroupNotFoundException | GroupSendingNotAllowedException e) {
             throw new AssertionError(e);
         }
     }
             throw new AssertionError(e);
         }
     }
@@ -1109,7 +1110,7 @@ public class Manager implements Closeable {
 
     public void sendTypingMessage(
             TypingAction action, Set<RecipientIdentifier> recipients
 
     public void sendTypingMessage(
             TypingAction action, Set<RecipientIdentifier> recipients
-    ) throws IOException, UntrustedIdentityException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, UntrustedIdentityException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         sendTypingMessage(action.toSignalService(), recipients);
     }
 
         sendTypingMessage(action.toSignalService(), recipients);
     }
 
@@ -1530,9 +1531,20 @@ public class Manager implements Closeable {
         }
 
         final var recipientId = resolveRecipient(source);
         }
 
         final var recipientId = resolveRecipient(source);
-        return !group.isMember(recipientId) || (
-                group.isAnnouncementGroup() && !group.isAdmin(recipientId)
-        );
+        if (!group.isMember(recipientId)) {
+            return true;
+        }
+
+        if (group.isAnnouncementGroup() && !group.isAdmin(recipientId)) {
+            return message.getBody().isPresent()
+                    || message.getAttachments().isPresent()
+                    || message.getQuote()
+                    .isPresent()
+                    || message.getPreviews().isPresent()
+                    || message.getMentions().isPresent()
+                    || message.getSticker().isPresent();
+        }
+        return false;
     }
 
     private List<HandleAction> handleMessage(
     }
 
     private List<HandleAction> handleMessage(
diff --git a/lib/src/main/java/org/asamk/signal/manager/groups/GroupSendingNotAllowedException.java b/lib/src/main/java/org/asamk/signal/manager/groups/GroupSendingNotAllowedException.java
new file mode 100644 (file)
index 0000000..1a2fa43
--- /dev/null
@@ -0,0 +1,8 @@
+package org.asamk.signal.manager.groups;
+
+public class GroupSendingNotAllowedException extends Exception {
+
+    public GroupSendingNotAllowedException(GroupId groupId, String groupName) {
+        super("User is not allowed to send message to group: " + groupName + " (" + groupId.toBase64() + ")");
+    }
+}
index 0b9cc9507730c20f359e619b8cc093ef7cddc36b..9ff3134eaed78eb51541c2aa18ffad4e731fde51 100644 (file)
@@ -12,6 +12,7 @@ import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
@@ -195,7 +196,7 @@ public class GroupHelper {
             final File avatarFile,
             final Integer expirationTimer,
             final Boolean isAnnouncementGroup
             final File avatarFile,
             final Integer expirationTimer,
             final Boolean isAnnouncementGroup
-    ) throws IOException, GroupNotFoundException, AttachmentInvalidException, NotAGroupMemberException {
+    ) throws IOException, GroupNotFoundException, AttachmentInvalidException, NotAGroupMemberException, GroupSendingNotAllowedException {
         var group = getGroupForUpdating(groupId);
 
         if (group instanceof GroupInfoV2) {
         var group = getGroupForUpdating(groupId);
 
         if (group instanceof GroupInfoV2) {
@@ -410,13 +411,13 @@ public class GroupHelper {
      */
     private void setExpirationTimer(
             GroupInfoV1 groupInfoV1, int messageExpirationTimer
      */
     private void setExpirationTimer(
             GroupInfoV1 groupInfoV1, int messageExpirationTimer
-    ) throws NotAGroupMemberException, GroupNotFoundException, IOException {
+    ) throws NotAGroupMemberException, GroupNotFoundException, IOException, GroupSendingNotAllowedException {
         groupInfoV1.messageExpirationTime = messageExpirationTimer;
         account.getGroupStore().updateGroup(groupInfoV1);
         sendExpirationTimerUpdate(groupInfoV1.getGroupId());
     }
 
         groupInfoV1.messageExpirationTime = messageExpirationTimer;
         account.getGroupStore().updateGroup(groupInfoV1);
         sendExpirationTimerUpdate(groupInfoV1.getGroupId());
     }
 
-    private void sendExpirationTimerUpdate(GroupIdV1 groupId) throws IOException, NotAGroupMemberException, GroupNotFoundException {
+    private void sendExpirationTimerUpdate(GroupIdV1 groupId) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         final var messageBuilder = SignalServiceDataMessage.newBuilder().asExpirationUpdate();
         sendHelper.sendAsGroupMessage(messageBuilder, groupId);
     }
         final var messageBuilder = SignalServiceDataMessage.newBuilder().asExpirationUpdate();
         sendHelper.sendAsGroupMessage(messageBuilder, groupId);
     }
index b04ff40d445af9ad9158dcec4c010f387c0af754..f92d7bde56a739c6cb5088ebb7de52eafa39d6a4 100644 (file)
@@ -3,6 +3,7 @@ package org.asamk.signal.manager.helper;
 import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.groups.GroupUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.SignalAccount;
@@ -86,19 +87,32 @@ public class SendHelper {
      */
     public List<SendMessageResult> sendAsGroupMessage(
             SignalServiceDataMessage.Builder messageBuilder, GroupId groupId
      */
     public List<SendMessageResult> sendAsGroupMessage(
             SignalServiceDataMessage.Builder messageBuilder, GroupId groupId
-    ) throws IOException, GroupNotFoundException, NotAGroupMemberException {
+    ) throws IOException, GroupNotFoundException, NotAGroupMemberException, GroupSendingNotAllowedException {
         final var g = getGroupForSending(groupId);
         return sendAsGroupMessage(messageBuilder, g);
     }
 
     private List<SendMessageResult> sendAsGroupMessage(
             final SignalServiceDataMessage.Builder messageBuilder, final GroupInfo g
         final var g = getGroupForSending(groupId);
         return sendAsGroupMessage(messageBuilder, g);
     }
 
     private List<SendMessageResult> sendAsGroupMessage(
             final SignalServiceDataMessage.Builder messageBuilder, final GroupInfo g
-    ) throws IOException {
+    ) throws IOException, GroupSendingNotAllowedException {
         GroupUtils.setGroupContext(messageBuilder, g);
         messageBuilder.withExpiration(g.getMessageExpirationTime());
 
         GroupUtils.setGroupContext(messageBuilder, g);
         messageBuilder.withExpiration(g.getMessageExpirationTime());
 
+        final var message = messageBuilder.build();
         final var recipients = g.getMembersWithout(account.getSelfRecipientId());
         final var recipients = g.getMembersWithout(account.getSelfRecipientId());
-        return sendGroupMessage(messageBuilder.build(), recipients);
+
+        if (g.isAnnouncementGroup() && !g.isAdmin(account.getSelfRecipientId())) {
+            if (message.getBody().isPresent()
+                    || message.getAttachments().isPresent()
+                    || message.getQuote().isPresent()
+                    || message.getPreviews().isPresent()
+                    || message.getMentions().isPresent()
+                    || message.getSticker().isPresent()) {
+                throw new GroupSendingNotAllowedException(g.getGroupId(), g.getTitle());
+            }
+        }
+
+        return sendGroupMessage(message, recipients);
     }
 
     /**
     }
 
     /**
@@ -181,8 +195,11 @@ public class SendHelper {
 
     public void sendGroupTypingMessage(
             SignalServiceTypingMessage message, GroupId groupId
 
     public void sendGroupTypingMessage(
             SignalServiceTypingMessage message, GroupId groupId
-    ) throws IOException, NotAGroupMemberException, GroupNotFoundException {
+    ) throws IOException, NotAGroupMemberException, GroupNotFoundException, GroupSendingNotAllowedException {
         final var g = getGroupForSending(groupId);
         final var g = getGroupForSending(groupId);
+        if (g.isAnnouncementGroup() && !g.isAdmin(account.getSelfRecipientId())) {
+            throw new GroupSendingNotAllowedException(groupId, g.getTitle());
+        }
         final var messageSender = dependencies.getMessageSender();
         final var recipientIdList = new ArrayList<>(g.getMembersWithout(account.getSelfRecipientId()));
         final var addresses = recipientIdList.stream()
         final var messageSender = dependencies.getMessageSender();
         final var recipientIdList = new ArrayList<>(g.getMembersWithout(account.getSelfRecipientId()));
         final var addresses = recipientIdList.stream()
index f033e0b1e43c29ae610bbb175e6173d030275d30..e482dd583c5ff6736cc6b19178721d0fecc67351 100644 (file)
@@ -13,6 +13,7 @@ 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.groups.GroupNotFoundException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
@@ -60,7 +61,7 @@ public class RemoteDeleteCommand implements DbusCommand, JsonRpcLocalCommand {
             final var results = m.sendRemoteDeleteMessage(targetTimestamp, recipientIdentifiers);
             outputResult(outputWriter, results.getTimestamp());
             ErrorUtils.handleSendMessageResults(results.getResults());
             final var results = m.sendRemoteDeleteMessage(targetTimestamp, recipientIdentifiers);
             outputResult(outputWriter, results.getTimestamp());
             ErrorUtils.handleSendMessageResults(results.getResults());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
index a1e4c2963d2cb3bbf195e9c7a4ccb4ac654354a3..c29d02681d183ba63503a5597ee0867ebd859265 100644 (file)
@@ -17,6 +17,7 @@ import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
@@ -108,7 +109,7 @@ public class SendCommand implements DbusCommand, JsonRpcLocalCommand {
             ErrorUtils.handleSendMessageResults(results.getResults());
         } catch (AttachmentInvalidException | IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
             ErrorUtils.handleSendMessageResults(results.getResults());
         } catch (AttachmentInvalidException | IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException(e.getMessage());
         }
     }
             throw new UserErrorException(e.getMessage());
         }
     }
index c8e339a10073fe3e8292f782b81f5a150f63c7fe..98e5f5ec6d416541e63333f5db52d56a86884fce 100644 (file)
@@ -13,6 +13,7 @@ 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.groups.GroupNotFoundException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
@@ -76,7 +77,7 @@ public class SendReactionCommand implements DbusCommand, JsonRpcLocalCommand {
                     recipientIdentifiers);
             outputResult(outputWriter, results.getTimestamp());
             ErrorUtils.handleSendMessageResults(results.getResults());
                     recipientIdentifiers);
             outputResult(outputWriter, results.getTimestamp());
             ErrorUtils.handleSendMessageResults(results.getResults());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
index 14139885aae426396c3cc82930b52cdf2a7cea69..ace4da8529a57e057b724b4a7418e9d302e8cacf 100644 (file)
@@ -11,6 +11,7 @@ import org.asamk.signal.manager.Manager;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.TypingAction;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
@@ -59,7 +60,7 @@ public class SendTypingCommand implements JsonRpcLocalCommand {
             m.sendTypingMessage(action, recipientIdentifiers);
         } catch (IOException | UntrustedIdentityException e) {
             throw new UserErrorException("Failed to send message: " + e.getMessage());
             m.sendTypingMessage(action, recipientIdentifiers);
         } catch (IOException | UntrustedIdentityException e) {
             throw new UserErrorException("Failed to send message: " + e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException("Failed to send to group: " + e.getMessage());
         }
     }
             throw new UserErrorException("Failed to send to group: " + e.getMessage());
         }
     }
index fc2cfbc082583b2a5ba50e932d239bb35b557585..a8d556f3495db8733b4eee9e995ee4c1ce2f5446 100644 (file)
@@ -17,6 +17,7 @@ import org.asamk.signal.manager.groups.GroupId;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
 import org.asamk.signal.manager.groups.GroupLinkState;
 import org.asamk.signal.manager.groups.GroupNotFoundException;
 import org.asamk.signal.manager.groups.GroupPermission;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.util.CommandUtil;
 import org.asamk.signal.util.ErrorUtils;
@@ -170,7 +171,7 @@ public class UpdateGroupCommand implements DbusCommand, JsonRpcLocalCommand {
             outputResult(outputWriter, timestamp, isNewGroup ? groupId : null);
         } catch (AttachmentInvalidException e) {
             throw new UserErrorException("Failed to add avatar attachment for group\": " + e.getMessage());
             outputResult(outputWriter, timestamp, isNewGroup ? groupId : null);
         } catch (AttachmentInvalidException e) {
             throw new UserErrorException("Failed to add avatar attachment for group\": " + e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
             throw new UserErrorException(e.getMessage());
         } catch (IOException e) {
             throw new UnexpectedErrorException("Failed to send message: " + e.getMessage());
index c5be7501dbca99b7acb09cb2f081e5e35d1024c9..315e1d8eb4e8c046533c1d86a3b5f851c267c2a2 100644 (file)
@@ -10,6 +10,7 @@ import org.asamk.signal.manager.api.RecipientIdentifier;
 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;
+import org.asamk.signal.manager.groups.GroupSendingNotAllowedException;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.identities.IdentityInfo;
 import org.asamk.signal.manager.groups.LastGroupAdminException;
 import org.asamk.signal.manager.groups.NotAGroupMemberException;
 import org.asamk.signal.manager.storage.identities.IdentityInfo;
@@ -77,7 +78,7 @@ public class DbusSignalImpl implements Signal {
             throw new Error.AttachmentInvalid(e.getMessage());
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             throw new Error.AttachmentInvalid(e.getMessage());
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -104,7 +105,7 @@ public class DbusSignalImpl implements Signal {
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -120,7 +121,7 @@ public class DbusSignalImpl implements Signal {
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -158,7 +159,7 @@ public class DbusSignalImpl implements Signal {
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -176,7 +177,7 @@ public class DbusSignalImpl implements Signal {
             throw new Error.AttachmentInvalid(e.getMessage());
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             throw new Error.AttachmentInvalid(e.getMessage());
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -200,7 +201,7 @@ public class DbusSignalImpl implements Signal {
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         } catch (AttachmentInvalidException e) {
             throw new Error.AttachmentInvalid(e.getMessage());
             throw new Error.GroupNotFound(e.getMessage());
         } catch (AttachmentInvalidException e) {
             throw new Error.AttachmentInvalid(e.getMessage());
@@ -225,7 +226,7 @@ public class DbusSignalImpl implements Signal {
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             return results.getTimestamp();
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
             throw new Error.GroupNotFound(e.getMessage());
         }
     }
@@ -337,7 +338,7 @@ public class DbusSignalImpl implements Signal {
             }
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
             }
         } catch (IOException e) {
             throw new Error.Failure(e.getMessage());
-        } catch (GroupNotFoundException | NotAGroupMemberException e) {
+        } catch (GroupNotFoundException | NotAGroupMemberException | GroupSendingNotAllowedException e) {
             throw new Error.GroupNotFound(e.getMessage());
         } catch (AttachmentInvalidException e) {
             throw new Error.AttachmentInvalid(e.getMessage());
             throw new Error.GroupNotFound(e.getMessage());
         } catch (AttachmentInvalidException e) {
             throw new Error.AttachmentInvalid(e.getMessage());