mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 18:40:39 +00:00
Handle rate limit error in JSON-RPC mode
This commit is contained in:
parent
8d423adb4d
commit
699b21f066
3 changed files with 25 additions and 14 deletions
|
@ -115,7 +115,7 @@ public class Main {
|
||||||
case IOErrorException ioErrorException -> 3;
|
case IOErrorException ioErrorException -> 3;
|
||||||
case UntrustedKeyErrorException untrustedKeyErrorException -> 4;
|
case UntrustedKeyErrorException untrustedKeyErrorException -> 4;
|
||||||
case RateLimitErrorException rateLimitErrorException -> 5;
|
case RateLimitErrorException rateLimitErrorException -> 5;
|
||||||
case null, default -> 2;
|
case null -> 2;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package org.asamk.signal.commands.exceptions;
|
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) {
|
public CommandException(final String message) {
|
||||||
super(message);
|
super(message);
|
||||||
|
|
|
@ -14,6 +14,8 @@ import org.asamk.signal.commands.JsonRpcRegistrationCommand;
|
||||||
import org.asamk.signal.commands.JsonRpcSingleCommand;
|
import org.asamk.signal.commands.JsonRpcSingleCommand;
|
||||||
import org.asamk.signal.commands.exceptions.CommandException;
|
import org.asamk.signal.commands.exceptions.CommandException;
|
||||||
import org.asamk.signal.commands.exceptions.IOErrorException;
|
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.UntrustedKeyErrorException;
|
||||||
import org.asamk.signal.commands.exceptions.UserErrorException;
|
import org.asamk.signal.commands.exceptions.UserErrorException;
|
||||||
import org.asamk.signal.manager.Manager;
|
import org.asamk.signal.manager.Manager;
|
||||||
|
@ -35,6 +37,7 @@ public class SignalJsonRpcCommandHandler {
|
||||||
private static final int USER_ERROR = -1;
|
private static final int USER_ERROR = -1;
|
||||||
private static final int IO_ERROR = -3;
|
private static final int IO_ERROR = -3;
|
||||||
private static final int UNTRUSTED_KEY_ERROR = -4;
|
private static final int UNTRUSTED_KEY_ERROR = -4;
|
||||||
|
private static final int RATELIMIT_ERROR = -5;
|
||||||
|
|
||||||
private final Manager m;
|
private final Manager m;
|
||||||
private final MultiAccountManager c;
|
private final MultiAccountManager c;
|
||||||
|
@ -211,18 +214,26 @@ public class SignalJsonRpcCommandHandler {
|
||||||
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INVALID_REQUEST,
|
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INVALID_REQUEST,
|
||||||
e.getMessage(),
|
e.getMessage(),
|
||||||
null));
|
null));
|
||||||
} catch (UserErrorException e) {
|
} catch (CommandException ce) {
|
||||||
throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR,
|
switch (ce) {
|
||||||
e.getMessage(),
|
case UserErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR,
|
||||||
getErrorDataNode(objectMapper, result)));
|
e.getMessage(),
|
||||||
} catch (IOErrorException e) {
|
getErrorDataNode(objectMapper, result)));
|
||||||
throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR,
|
case IOErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR,
|
||||||
e.getMessage(),
|
e.getMessage(),
|
||||||
getErrorDataNode(objectMapper, result)));
|
getErrorDataNode(objectMapper, result)));
|
||||||
} catch (UntrustedKeyErrorException e) {
|
case UntrustedKeyErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(
|
||||||
throw new JsonRpcException(new JsonRpcResponse.Error(UNTRUSTED_KEY_ERROR,
|
UNTRUSTED_KEY_ERROR,
|
||||||
e.getMessage(),
|
e.getMessage(),
|
||||||
getErrorDataNode(objectMapper, result)));
|
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) {
|
} catch (Throwable e) {
|
||||||
logger.error("Command execution failed", e);
|
logger.error("Command execution failed", e);
|
||||||
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
|
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue