From: AsamK Date: Fri, 7 Oct 2022 17:31:27 +0000 (+0200) Subject: Improve error message when joining a group with already pending admin approval X-Git-Tag: v0.11.4~29 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/489fb2ac2272f2ca1b06c18d4a951e4d502fdd13?ds=inline Improve error message when joining a group with already pending admin approval --- diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index 4bc4019c..eb62cb60 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -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 joinGroup( GroupInviteLinkUrl inviteLinkUrl - ) throws IOException, InactiveGroupLinkException; + ) throws IOException, InactiveGroupLinkException, PendingAdminApprovalException; SendMessageResults sendTypingMessage( TypingAction action, Set recipients diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index 386e6fbe..6dc7b9a6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -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 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 index 00000000..8da3ca51 --- /dev/null +++ b/lib/src/main/java/org/asamk/signal/manager/api/PendingAdminApprovalException.java @@ -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); + } +} diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java index 5a262685..3f8740d9 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java @@ -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 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(), diff --git a/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java b/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java index 31fc4caf..5e3461b7 100644 --- a/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java +++ b/src/main/java/org/asamk/signal/commands/JoinGroupCommand.java @@ -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()); } } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index a65c183b..4b5b3ba8 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -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) {