From: AsamK Date: Sun, 5 Nov 2023 15:20:33 +0000 (+0100) Subject: Handle rate limit error in JSON-RPC mode X-Git-Tag: v0.13.0~116 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/699b21f066eb3a0c5c21b58ccb79276cc3d296c9?ds=sidebyside Handle rate limit error in JSON-RPC mode --- diff --git a/src/main/java/org/asamk/signal/Main.java b/src/main/java/org/asamk/signal/Main.java index 00d9d7a9..2b805b68 100644 --- a/src/main/java/org/asamk/signal/Main.java +++ b/src/main/java/org/asamk/signal/Main.java @@ -115,7 +115,7 @@ public class Main { case IOErrorException ioErrorException -> 3; case UntrustedKeyErrorException untrustedKeyErrorException -> 4; case RateLimitErrorException rateLimitErrorException -> 5; - case null, default -> 2; + case null -> 2; }; } } diff --git a/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java b/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java index bae7af43..739aee91 100644 --- a/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java +++ b/src/main/java/org/asamk/signal/commands/exceptions/CommandException.java @@ -1,6 +1,6 @@ package org.asamk.signal.commands.exceptions; -public class CommandException extends Exception { +public sealed abstract class CommandException extends Exception permits IOErrorException, RateLimitErrorException, UnexpectedErrorException, UntrustedKeyErrorException, UserErrorException { public CommandException(final String message) { super(message); diff --git a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcCommandHandler.java b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcCommandHandler.java index 720f22e6..62556725 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcCommandHandler.java +++ b/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcCommandHandler.java @@ -14,6 +14,8 @@ import org.asamk.signal.commands.JsonRpcRegistrationCommand; import org.asamk.signal.commands.JsonRpcSingleCommand; import org.asamk.signal.commands.exceptions.CommandException; import org.asamk.signal.commands.exceptions.IOErrorException; +import org.asamk.signal.commands.exceptions.RateLimitErrorException; +import org.asamk.signal.commands.exceptions.UnexpectedErrorException; import org.asamk.signal.commands.exceptions.UntrustedKeyErrorException; import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.Manager; @@ -35,6 +37,7 @@ public class SignalJsonRpcCommandHandler { private static final int USER_ERROR = -1; private static final int IO_ERROR = -3; private static final int UNTRUSTED_KEY_ERROR = -4; + private static final int RATELIMIT_ERROR = -5; private final Manager m; private final MultiAccountManager c; @@ -211,18 +214,26 @@ public class SignalJsonRpcCommandHandler { throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INVALID_REQUEST, e.getMessage(), null)); - } catch (UserErrorException e) { - throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR, - e.getMessage(), - getErrorDataNode(objectMapper, result))); - } catch (IOErrorException e) { - throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR, - e.getMessage(), - getErrorDataNode(objectMapper, result))); - } catch (UntrustedKeyErrorException e) { - throw new JsonRpcException(new JsonRpcResponse.Error(UNTRUSTED_KEY_ERROR, - e.getMessage(), - getErrorDataNode(objectMapper, result))); + } catch (CommandException ce) { + switch (ce) { + case UserErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR, + e.getMessage(), + getErrorDataNode(objectMapper, result))); + case IOErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR, + e.getMessage(), + getErrorDataNode(objectMapper, result))); + case UntrustedKeyErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error( + UNTRUSTED_KEY_ERROR, + e.getMessage(), + getErrorDataNode(objectMapper, result))); + case RateLimitErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(RATELIMIT_ERROR, + e.getMessage(), + getErrorDataNode(objectMapper, result))); + case UnexpectedErrorException e -> + throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR, + e.getMessage(), + getErrorDataNode(objectMapper, result))); + } } catch (Throwable e) { logger.error("Command execution failed", e); throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,