]> nmode's Git Repositories - signal-cli/commitdiff
Improve error message when joining a group with already pending admin approval
authorAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 17:31:27 +0000 (19:31 +0200)
committerAsamK <asamk@gmx.de>
Fri, 7 Oct 2022 17:31:27 +0000 (19:31 +0200)
lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/api/PendingAdminApprovalException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
src/main/java/org/asamk/signal/commands/JoinGroupCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 4bc4019ca20dbadb2cac1aa1bf0f8fb1890b85d1..eb62cb60ef1359b9adef3fb75bc62bda50a86907 100644 (file)
@@ -12,6 +12,7 @@ import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.MessageEnvelope;
 import org.asamk.signal.manager.api.NotPrimaryDeviceException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.PendingAdminApprovalException;
 import org.asamk.signal.manager.api.ReceiveConfig;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
@@ -108,7 +109,7 @@ public interface Manager extends Closeable {
 
     Pair<GroupId, SendGroupMessageResults> joinGroup(
             GroupInviteLinkUrl inviteLinkUrl
-    ) throws IOException, InactiveGroupLinkException;
+    ) throws IOException, InactiveGroupLinkException, PendingAdminApprovalException;
 
     SendMessageResults sendTypingMessage(
             TypingAction action, Set<RecipientIdentifier> recipients
index 386e6fbe56a05fe8eae94b62acdaa290e3ad44e8..6dc7b9a67af501d74c786bb3c28d262a47206a77 100644 (file)
@@ -27,6 +27,7 @@ import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.NotPrimaryDeviceException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.PendingAdminApprovalException;
 import org.asamk.signal.manager.api.ReceiveConfig;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
@@ -431,7 +432,7 @@ class ManagerImpl implements Manager {
     @Override
     public Pair<GroupId, SendGroupMessageResults> joinGroup(
             GroupInviteLinkUrl inviteLinkUrl
-    ) throws IOException, InactiveGroupLinkException {
+    ) throws IOException, InactiveGroupLinkException, PendingAdminApprovalException {
         return context.getGroupHelper().joinGroup(inviteLinkUrl);
     }
 
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/PendingAdminApprovalException.java b/lib/src/main/java/org/asamk/signal/manager/api/PendingAdminApprovalException.java
new file mode 100644 (file)
index 0000000..8da3ca5
--- /dev/null
@@ -0,0 +1,12 @@
+package org.asamk.signal.manager.api;
+
+public class PendingAdminApprovalException extends Exception {
+
+    public PendingAdminApprovalException(final String message) {
+        super(message);
+    }
+
+    public PendingAdminApprovalException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+}
index 5a262685ec294513a8eb8336ea9462630fd4b727..3f8740d92707184d97a7fe5c2b2f72843e8abcd1 100644 (file)
@@ -4,6 +4,7 @@ import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.InactiveGroupLinkException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.PendingAdminApprovalException;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.config.ServiceConfig;
@@ -290,7 +291,7 @@ public class GroupHelper {
 
     public Pair<GroupId, SendGroupMessageResults> joinGroup(
             GroupInviteLinkUrl inviteLinkUrl
-    ) throws IOException, InactiveGroupLinkException {
+    ) throws IOException, InactiveGroupLinkException, PendingAdminApprovalException {
         final DecryptedGroupJoinInfo groupJoinInfo;
         try {
             groupJoinInfo = context.getGroupV2Helper()
@@ -298,6 +299,9 @@ public class GroupHelper {
         } catch (GroupLinkNotActiveException e) {
             throw new InactiveGroupLinkException("Group link inactive (reason: " + e.getReason() + ")", e);
         }
+        if (groupJoinInfo.getPendingAdminApproval()) {
+            throw new PendingAdminApprovalException("You have already requested to join the group.");
+        }
         final var groupChange = context.getGroupV2Helper()
                 .joinGroup(inviteLinkUrl.getGroupMasterKey(), inviteLinkUrl.getPassword(), groupJoinInfo);
         final var group = getOrMigrateGroup(inviteLinkUrl.getGroupMasterKey(),
index 31fc4caf7ecc1018d7e8d4ed1b587f5783d16e8e..5e3461b7a6c3ddb079914cc563a0af91fc026089 100644 (file)
@@ -9,6 +9,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.api.InactiveGroupLinkException;
+import org.asamk.signal.manager.api.PendingAdminApprovalException;
 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
 import org.asamk.signal.output.JsonWriter;
 import org.asamk.signal.output.OutputWriter;
@@ -94,6 +95,8 @@ public class JoinGroupCommand implements JsonRpcLocalCommand {
                     .getSimpleName() + ")", e);
         } catch (InactiveGroupLinkException e) {
             throw new UserErrorException("Group link is not valid: " + e.getMessage());
+        } catch (PendingAdminApprovalException e) {
+            throw new UserErrorException("Pending admin approval: " + e.getMessage());
         }
     }
 }
index a65c183b030b792a04546c020755c2ade46185c1..4b5b3ba84714513359fe386ff520ec25880df035 100644 (file)
@@ -10,6 +10,7 @@ import org.asamk.signal.manager.api.InvalidNumberException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.NotPrimaryDeviceException;
+import org.asamk.signal.manager.api.PendingAdminApprovalException;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
@@ -778,6 +779,8 @@ public class DbusSignalImpl implements Signal {
             }
             final var result = m.joinGroup(linkUrl);
             return result.first().serialize();
+        } catch (PendingAdminApprovalException e) {
+            throw new Error.Failure("Pending admin approval: " + e.getMessage());
         } catch (GroupInviteLinkUrl.InvalidGroupLinkException | InactiveGroupLinkException e) {
             throw new Error.Failure("Group link is invalid: " + e.getMessage());
         } catch (GroupInviteLinkUrl.UnknownGroupLinkVersionException e) {