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;
public class SignalJsonRpcCommandHandler {
- private final static Logger logger = LoggerFactory.getLogger(SignalJsonRpcDispatcherHandler.class);
+ private static final Logger logger = LoggerFactory.getLogger(SignalJsonRpcDispatcherHandler.class);
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;
}
public JsonNode handleRequest(
- final ObjectMapper objectMapper, final String method, ContainerNode<?> params
+ final ObjectMapper objectMapper,
+ final String method,
+ ContainerNode<?> params
) throws JsonRpcException {
var command = getCommand(method);
if (c != null) {
if (manager == null) {
final var managers = c.getManagers();
if (managers.size() == 1) {
- manager = managers.get(0);
+ manager = managers.getFirst();
}
}
if (manager != null) {
}
private JsonNode runCommand(
- final ObjectMapper objectMapper, final ContainerNode<?> params, final CommandRunner<?> command
+ final ObjectMapper objectMapper,
+ final ContainerNode<?> params,
+ final CommandRunner<?> command
) throws JsonRpcException {
final Object[] result = {null};
final JsonWriter commandJsonWriter = s -> {
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 -> {
+ logger.error("Command execution failed with unexpected error", e);
+ throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
+ e.getMessage() + " (" + e.getClass().getSimpleName() + ")",
+ getErrorDataNode(objectMapper, result)));
+ }
+ }
} catch (Throwable e) {
logger.error("Command execution failed", e);
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
- e.getMessage(),
+ e.getMessage() + " (" + e.getClass().getSimpleName() + ")",
getErrorDataNode(objectMapper, result)));
}